如何在以下情况下使用分区

时间:2019-07-22 21:09:20

标签: sql postgresql

我正在尝试通过窗口函数解决此问题,但我仍在努力。我有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 |

1 个答案:

答案 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');