繁体   English   中英

SQL:查找具有重复值的最小、最大日期

[英]SQL: Finding min, max date with repeated value

如果我有如下数据,我需要按日期查找每个促销订单的最小和最大日期请帮我获取 SQL 脚本

数据:
样本数据

Data:   
month           promotion
31/01/2019          A
28/02/2019          A
31/03/2019          B
30/04/2019          C
31/05/2019          C
30/06/2019          C
31/07/2019          C
31/08/2019          C
30/09/2019          B
31/10/2019          B
30/11/2019          B
31/12/2019          B

需要结果:
需要结果

need result:        
min_month   max_month   promotion
31/01/2019  28/02/2019  A
31/03/2019  31/03/2019  B
30/04/2019  31/08/2019  C
30/09/2019  31/12/2019  B

我得到的结果:不正确
我得到的结果:不正确

min_month   max_month   promotion
31/01/2019  28/02/2019  A
31/03/2019  31/12/2019  B
30/04/2019  31/08/2019  C

谢谢

我的剧本

select promotion, min(month) min_month, max(month) max_month  
from table  
group by promotion

这是 GAPS 和 ISLAND 问题的形式。 如果您的 DBMS 支持窗口函数,您可以尝试以下查询 -

select min(month) min_month, max(month) max_month, promotion
from (select promotion,
             month,
             rank() over(order by month) seqnum1,
             rank() over(partition by promotion order by month) seqnum2
      from table) t
group by promotion, seqnum1 - seqnum2;

您还可以使用lag()来填补空白:

select promotion, min(month) as min_month, max(month) as max_month
from (select t.*, 
             sum(case when promotion <> prev then 1 else 0 end) over (order by month) as grp
      from (select t.*, 
                   lag(promotion) over (order by month) as prev
            from table t
           ) t
     ) t
group by promotion, grp
order by min(month);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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