限制两列减法之和等于某个值的行


Limiting the rows where sum of two columns subtraction equals a value

我在PHP中处理一些文件,并使用MySQL来存储结果。下面是我的表格的样子:

tblConverts:

  ID   ACCESS_KEY    STATUS     TOTAL_PAGES   PROCESSED_PAGES  
 ---- ------------ ----------- ------------- ----------------- 
   1   upYP5RbNqQ   COMPLETED            10                10  
   2   IeH02qBAtV   WAITING              32                18  
   3   Di5sCWxA2p   REJECTED             28                 0  
   4   Aft54Xhr3f   WAITING              40                 0  
   5   TzU1VMoeQF   WAITING              30                 0  

我想让我的批处理脚本在"等待"标记的记录上工作,直到它达到两列(TOTAL_PAGES - PROCESSED_PAGES)之和等于100的点。

我实现它的方式是查询:

SELECT * FROM tblConverts WHERE status = 'WAITING' AND TOTAL_PAGES > PROCESSED_PAGES LIMIT 500

然后在PHP脚本中,我做了一个循环,减去行,直到计数器达到100。但是,将SQL和PHP结合使用这种方法并不是一个好主意。如何将此函数实现为单个SQL查询?

:

假设每次执行20页(整行,而不是每行),第一行和第三行不匹配,因此我们将处理第二、第四和第五行。从第二行我们有14页(32 - 18)。因为行#2的剩余页数少于20,它应该寻找下一个。下一个(#4)有40页,所以剩余页面的总和(14 + 40)大于20。因此,它必须在这里停止并返回行(#2和#4)。

请尝试这个,让我知道如果你正在寻找相同的

注意:20是你在问题中提到的限制。你可以根据自己的需要修改。

SELECT
    *
FROM
    tblConverts
WHERE
    ID IN (
        SELECT
            m1.ID
        FROM
            tblConverts m1
        LEFT JOIN tblConverts m2 ON m1.ID >= m2.ID
        WHERE
            m1. STATUS = 'WAITING'
        AND m2. STATUS = 'WAITING'
        GROUP BY
            m1.ID
        HAVING
            SUM(
                m2.TOTAL_PAGES - m2.PROCESSED_PAGES
            ) - SUM(m1.TOTAL_PAGES) / COUNT(m1.TOTAL_PAGES) < 20
    )

希望这对你有帮助!