我有一个我正在处理的colums数据库。我正在寻找的是与查询中SUM(#)达到6的行相关联的日期。我现在的查询将给出当列中的数字是六而不是前一行的总和的日期。以下示例
Date number
---- ------
6mar16 1
8mar16 4
10mar16 6
12mar16 2
我想获得一个查询以获得10mar16日期,因为在该日期该数字现在大于6.早期日期总计不超过六个。
以下是我一直在进行的查询示例:
SELECT max(date) FROM `numbers` WHERE `number` > 60
答案 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
答案 2 :(得分:0)
真棒!!!!它似乎工作得很好。这是我使用的代码。
选择日期,身份证,船名
FROM(select * FROM flightrecord WHERE crewname
=' brayn'
ORDER BY dutyTimeArrive DESC)作为基础,
(选择@sum:= 0)init
WHERE(@sum:= @sum + tankDropCount)> = 6
限制1