2017-08-29 17 views
0

開始日に基づいて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 
+0

あなたは何日後に必要ですか?わずか90以上?または多分すべて? –

+0

最初の数日が正しい場合は、コードを拡張できますが、30年の期間は15年1月15日から開始します(多くの左外部結合よりもこれを行うよりよい方法があるかどうかはわかりません)。 – 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 in Vertica **](https://forum.vertica.com/discussion/211469/are-there-sql-commands-to-pivot-data) –

+0

エラーが表示されます。演算子が存在しません:int - 日付 – PinkyL

関連する問題