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