2017-08-29 62 views
0

我想根據開始日期每30天保留一次最長日期。爲了簡單起見,我在一個ID上測試了它,但實際數據包含很多ID。從開始日期開始每30天保留一次最長日期

我的數據看起來是這樣的:

ID  date 
A  15JAN2016 
A  11MAR2016 
A  13MAY2016 
A  25MAY2016 
A  26MAY2016 
A  08JUN2016 
A  09JUN2016 
A  10JUN2016 

茶几應該是這樣的:

ID  Max_srv_dt_1 Max_srv_dt_2 Max_srv_dt_3 Max_srv_dt_4 
A  15Jan2016  11Mar2016  13May2016  10JUN2016 

我的代碼:

SELECT c1.ID, 
     MIN_SRV_DT_1, 
     Max_SRV_DT_2, 
     Max(C2.date) OVER (PARTITION BY c2.ID ORDER BY C2.date+30) Max_SRV_DT_3 
FROM 
    (SELECT c1.ID, MIN_SRV_DT_1, max(C2.date) OVER (PARTITION BY c2.ID ORDER BY C2.date+30) Max_SRV_DT_2 
     FROM 
      (SELECT c1.ID, MIN(C1.date) MIN_SRV_DT_1 
      FROM max_ep_test C1 
      GROUP BY c1.ID) C1 
     LEFT OUTER JOIN max_ep_test C2 
     ON c1.ID = c2.ID 
     AND C2.date < C1.MIN_SRV_DT_1 + 30 
    ) C1 
     LEFT OUTER JOIN max_ep_test C2 
     ON c1.ID = c2.ID 
     AND C2.date > max_srv_dt_2 + 30 

我得到類似如下,並且無法弄清楚如何更改參數以實際採取正確的日期:

ID min_srv_dt_1 max_srv_dt_2 max_srv_dt_3 
A 15JAN2016  15JAN2016  11MAR2016 
A 15JAN2016  15JAN2016  13MAR2016 
A 15JAN2016  15JAN2016  13MAY2016 
A 15JAN2016  15JAN2016  25MAY2016 
A 15JAN2016  15JAN2016  26MARY016 
A 15JAN2016  15JAN2016  08JUN2016 
A 15JAN2016  15JAN2016  09JUN2016 
A 15JAN2016  15JAN2016  10JUN2016 
+0

你需要多少天?只有90或更多?或者全部? –

+0

從2016年1月15日開始,全年爲30天,儘管如果前幾個日期正確(不確定是否有更好的方法可以做到這一點,比許多左外連接)我可以擴展代碼。 – PinkyL

+0

我不確定,但我認爲你可以用窗口框架來做,閱讀[這裏](https://my.vertica.com/docs/7.1.x/HTML/index.htm#Authoring/AnalyzingData/WindowsWithALogicalOffsetRANGE .htm%3FTocPath%3DAnalyzing%2520Data%7CUsing%2520SQL%2520Analytics%7CThe%2520Window%2520OVER()%2520Clause%7CWindow%2520Framing%7C _____ 2)(最後一個例子)。 – sKwa

回答

1

您可以使用datediff()來計算任何日期和最早日期之間的差異。剩下的只是聚合:

select id, max(date) 
from (select et.*, 
      datediff('day', min(date) over (partition by id), date) as datediff_day 
     from max_ep_test et 
    ) et 
group by floor(datediff_day/30); 
+0

OP需要30天的最大日期。也需要該字段,因此可以在聚合後執行Pivot。 [**在Vertica **中旋轉](https://forum.vertica.com/discussion/211469/are-there-sql-commands-to-pivot-data) –

+0

我得到一個錯誤:運算符不存在:int - 日期 – PinkyL

相關問題