MySQL - 查找行范围

时间:2014-12-10 02:08:43

标签: mysql sql

想象一下,我有这张桌子:

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中执行此操作?可能吗?我已经尝试了一会儿,但却找不到能给我任何类似东西的东西。

提前致谢。

1 个答案:

答案 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
相关问题