繁体   English   中英

SQL查询以查找基于日期的本地最大值,最小值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM