我正在尝试通过窗口函数解决此问题,但我仍在努力。我有4列tbl1(日期,id1,id2,指标)。我的桌子如下所示。
输入
日期| id1 | id2 |指标。
1/1/2019 | 1 | 123 | 1
2019年1月2日| 1 | 123 | 1
2019/1/3 | 1 | 999 | 1
1/4/2019 | 1 | 999 | 1
1/5/2019 | 1 | 123 | 1
1/6/2019 | 1 | 123 | 1
我尝试了以下代码。
select date, id1, id2, rank() over(partition by id1, id2 order by date)
from tbl1
group by 1,2,3
此代码返回2行。但是,我想在下面的3行中看到我的输出。
必需的输出
最小日期|最长日期| id1 | id2 |
1/1/2019 | 2019年1月2日| 1 | 123 |
2019/1/3 | 1/4/2019 | 1 | 999 |
1/5/2019 | 1/6/2019 | 1 | 123 |
答案 0 :(得分:0)
我怀疑您有一个“空白与孤岛”问题(例如,您可能还在寻找相似值的相邻对)。
如果是这样,您可以从日期中减去一个序列以获取分组,然后进行汇总:
select min(date), max(date), id1, id2
from (select t.*,
row_number() over (partition by id1, id2 order by date) as seqnum
from t
) t
group by id1, id2, (date - seqnum * interval '1 day');