到达SUM时停止查询(mysql)

时间:2016-05-06 17:46:01

标签: mysql sql sum

我有一个我正在处理的colums数据库。我正在寻找的是与查询中SUM(#)达到6的行相关联的日期。我现在的查询将给出当列中的数字是六而不是前一行的总和的日期。以下示例

Date     number
----     ------
6mar16    1
8mar16    4
10mar16   6
12mar16   2

我想获得一个查询以获得10mar16日期,因为在该日期该数字现在大于6.早期日期总计不超过六个。

以下是我一直在进行的查询示例:

SELECT max(date) FROM `numbers` WHERE `number` > 60 

3 个答案:

答案 0 :(得分:2)

大多数数据库都支持ANSI标准窗口函数。在这种情况下,累积金额是你的朋友:

select t.*
from (select t.*, sum(number) over (order by date) as sumnumber
      from t
     ) t
where sumnumber >= 10
order by sumnumber
fetch first 1 row only;

在MySQL中,您需要变量:

select t.*
from (select t.*, (@sumn := @sumn + number) as sumnumber
      from t cross join (select @sumn) params
      order by date
     ) t
where sumnumber >= 10
order by sumnumber
fetch first 1 row only;

答案 1 :(得分:1)

您可以使用此查询跟踪累积的总和,然后返回满足条件的第一个:

select   date
from     (select * from mytable order by date) as base,
         (select @sum := 0) init
where    (@sum := @sum + number) >= 6
limit 1

SQL Fiddle

答案 2 :(得分:0)

真棒!!!!它似乎工作得很好。这是我使用的代码。

选择日期,身份证,船名 FROM(select * FROM flightrecord WHERE crewname =' brayn' ORDER BY dutyTimeArrive DESC)作为基础,          (选择@sum:= 0)init WHERE(@sum:= @sum + tankDropCount)> = 6 限制1