想象一下,我有这张桌子:
Table
Date B C rownum
1-1-2014 8 2 1
1-2-2014 8 4 2
1-3-2014 8 2 3
1-4-2014 8 5 4
1-1-2014 9 2 5
1-2-2014 9 0 6
1-3-2014 9 0 7
1-4-2014 9 1 8
这有点复杂:我想找到行的范围,其中列C的总和<=该范围内行数的1/3,但也要按列B分组。
所以在这种情况下,唯一的范围是第6行本身,第7行本身,范围第6行到第7行,范围第6行到第8行 - 我理想地想要限制返回的范围超过2行的那些,只留下第6行到第8行。
在EARTH上如何在MySQL中执行此操作?可能吗?我已经尝试了一会儿,但却找不到能给我任何类似东西的东西。
提前致谢。
答案 0 :(得分:1)
假设按顺序表示按日期列排序并且具有相同的列b值,您可以使用自连接生成所有序列:
select t.b, t.date as startdate, t2.date as enddate
from table t join
table t2
on t.b = t2.b and t.date <= t2.date;
然后,您可以使用另一个join
和聚合来获取总和:
select t.b, t.date as startdate, t2.date as enddate,
sum(tt.c) as sumc, count(*) as numrows
from table t join
table t2
on t.b = t2.b and t.date <= t2.date join
table tt
on tt.b = t.b and tt.date between t.date and t2.date
group by t.b, t.date, t2.date;
然后,您可以添加having
子句以获得所需内容:
having sum(tt.c) <= count(*) / 3