2017-02-24 65 views
1

有沒有一種直接的方法來確定Postgres中日期序列中連續性的長度?確定postgres中日期序列的連續性長度

爲了簡單起見,可以說我有日期的表,就像這樣:

2017-01-01 
2017-01-02 
2017-01-03 
2017-01-04 
2017-01-06 
2017-01-08 
2017-01-09 

對於每一天,我想知道它的日期的連續序列數。所以,我想:

2017-01-01 1 
2017-01-02 2 
2017-01-03 3 
2017-01-04 4 
2017-01-06 1 
2017-01-08 1 
2017-01-09 2 

我想我會需要使用一個程序,循環通過遊標保持計數,但不知道是否有可能是一個更聰明的方法呢?我花了一些時間來看看窗口功能,但沒有看到任何符合法案的東西。

回答

1

您可以通過減去序列號來識別序列。常數值代表一個序列。在此之後,您的枚舉是row_number()的應用程序:

select t.date, 
     row_number() over (partition by date - seqnum * interval '1 day' order by date) as col2 
from (select t.*, 
      row_number() over (order by date) as seqnum 
     from t 
    ) t; 
+0

噢,那太可愛了。非常感謝! – zambo

+0

您需要在外部選擇窗口中添加「按日期排序」。否則,col2的值不會按正確的順序增加。 – zambo