[英]SQL query to find continuous local max, min of date based on category column
[英]SQL query to find local max, min of date based data
我有以下数据集
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)
想法是根据日期对所有行进行排序,并根据日期对每个类别中的所有行进行排序。 如果这些数字之间的差异发生变化,则意味着一个类别的连续事件链被另一个类别破坏。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.