问题描述
PERIODE | 调查 |
---|---|
2020-02-03 | 2 |
2020-02-04 | 3 |
2020-03-10 | 5 |
2020-03-11 | 4 |
2020-07-28 | 1 |
2020-08-28 | 3 |
2020-11-28 | 4 |
SELECT `SURVEY`,MIN(`PERIODE`) AS `Range Start`,MAX(`PERIODE`) AS `Range End`,COUNT(*) AS `Count`
FROM `surveydb`
GROUP BY FLOOR(PERIOD_DIFF(@T1,DATE_FORMAT(`PERIODE`,'%Y%m')) / 3)
我想按 3 个月的间隔分组,但结果不同,
从 2020-02-03 到 2020-03-11 的日期间隔只显示了 1 个调查,尽管它们有不同的调查值,我如何显示每个组范围的所有调查
调查 | 范围开始 | 范围结束 | 计数 |
---|---|---|---|
2 | 2020-02-03 | 2020-03-11 | 4 |
1 | 2020-07-28 | 2020-08-28 | 2 |
我无法显示月间隔内的所有调查,例如从 2020-02-03 到 2020-03-11
相反,我想得到这样的结果:
调查 | 范围开始 | 范围结束 | 计数 |
---|---|---|---|
2 | 2020-02-03 | 2020-03-11 | 4 |
3 | 2020-02-03 | 2020-02-03 | 4 |
5 | 2020-02-03 | 2020-02-03 | 4 |
4 | 2020-02-03 | 2020-02-03 | 4 |
1 | 2020-07-28 | 2020-08-28 | 2 |
解决方法
看来你也需要按调查分组
SELECT `SURVEY`,MIN(`PERIODE`) AS `Range Start`,MAX(`PERIODE`) AS `Range End`,COUNT(*) AS `Count`
FROM `surveydb`
GROUP BY `SURVEY`,FLOOR(PERIOD_DIFF(@T1,DATE_FORMAT(`PERIODE`,'%Y%m')) / 3)
,
你想要窗口函数而不是聚合吗?
select survey,min(periode) over(partition by floor(period_diff(@t1,date_format(periode,'%y%m')) / 3)) as range_start,'%y%m')) / 3)) as range_end,count(*) over(partition by floor(period_diff(@t1,'%y%m')) / 3)) as cnt
from surveydb
我们可以使用命名窗口来缩短查询:
select survey,min(periode) over w as range_start,min(periode) over w as range_end,count(*) over w as cnt
from surveydb
window w as (partition by floor(period_diff(@t1,'%y%m')) / 3))