我想根據開始日期每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
你需要多少天?只有90或更多?或者全部? –
從2016年1月15日開始,全年爲30天,儘管如果前幾個日期正確(不確定是否有更好的方法可以做到這一點,比許多左外連接)我可以擴展代碼。 – PinkyL
我不確定,但我認爲你可以用窗口框架來做,閱讀[這裏](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