開始日に基づいて30日ごとに最大日付を保持しようとしています。簡単にするために、1つのIDでテストしましたが、実際のデータには多くのIDが含まれています。開始日から30日ごとに最大日付を保持
私のデータは、このようなものになります。私は、次のような何かを得る
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 Max_srv_dt_1 Max_srv_dt_2 Max_srv_dt_3 Max_srv_dt_4
A 15Jan2016 11Mar2016 13May2016 10JUN2016
マイコード:
ID date
A 15JAN2016
A 11MAR2016
A 13MAY2016
A 25MAY2016
A 26MAY2016
A 08JUN2016
A 09JUN2016
A 10JUN2016
をエンドテーブルは次のようになります。実際に正しい日付になるようにパラメータを変更する方法を理解することはできません:
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以上?または多分すべて? –
最初の数日が正しい場合は、コードを拡張できますが、30年の期間は15年1月15日から開始します(多くの左外部結合よりもこれを行うよりよい方法があるかどうかはわかりません)。 – 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