我有以下数据集
Date Category
2014-01-01 A
2014-01-02 A
2014-01-03 A
2014-01-04 B
2014-01-05 B
...
2014-01-10 B
2014-01-11 A
...
2014-01-20 A
我想要实现的结果是找到A和B的本地最小/最大日期,如下:
MinDate MaxDate Category
2014-01-01 2014-01-03 A
2014-01-04 2014-01-10 B
2014-01-11 2014-01-20 A
注意:使用
Select min(date), max(date), category from TABLE Group by category
将创建结果
MinDate MaxDate Category
2014-01-01 2014-01-20 A
2014-01-04 2014-01-10 B
这不是我想要实现的目标
最佳答案
假设您有一个支持窗口函数的 DBMS,您可以执行以下操作:
select category, grp, min(date) as min_date, max(date) as max_date
from (
select category, date
, row_number() over (order by date)
- row_number() over (partition by category order by date) as grp
from T
) as X
group by category, grp
order by min(date)
这个想法是根据日期对所有行进行排序,并根据日期对每个类别中的所有行进行排序。如果这些数字之间的差异发生变化,则意味着一个类别的连续事件链被另一个类别打破。
关于SQL 查询查找基于日期的数据的本地最大值、最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25543993/