ご質問です。
「各IDごとに過去1年間に起きたイベント回数を、イベントの日付ごとに求める」という作業を考えています。
具体的には、以下のテーブルのfreq_past_1yearの列を求めるSQLクエリを、是非ご教示いただければ幸甚です。
なお上の例ですと、ID=Aは、
2015年1月1日…初回のイベントなので、過去のイベント0回
2015年2月3日…1年振り返ると、2015年1月1日の1回
2015年8月3日…1年振り返ると、2015年1月1日、2015年2月3日の2回
2016年2月1日…1年振り返ると、2015年2月3日、2015年8月3日の2回
となっています。
(うるう年の処理が困難な場合は、365日と定義しても差し支えないと考えています)
<2020/11/29追記>
サンプルデータは以下で作成いたしました。
SQL
1CREATE TABLE TBL 2 ("ID" varchar2(1), "EVENT_DATE" timestamp) 3; 4 5INSERT ALL 6 INTO TBL ("ID", "EVENT_DATE") 7 VALUES ('A', '01-Jan-2015 12:00:00 AM') 8 INTO TBL ("ID", "EVENT_DATE") 9 VALUES ('A', '03-Feb-2015 12:00:00 AM') 10 INTO TBL ("ID", "EVENT_DATE") 11 VALUES ('A', '03-Aug-2015 12:00:00 AM') 12 INTO TBL ("ID", "EVENT_DATE") 13 VALUES ('A', '01-Feb-2016 12:00:00 AM') 14 INTO TBL ("ID", "EVENT_DATE") 15 VALUES ('B', '01-Apr-2013 12:00:00 AM') 16 INTO TBL ("ID", "EVENT_DATE") 17 VALUES ('B', '01-May-2014 12:00:00 AM') 18 INTO TBL ("ID", "EVENT_DATE") 19 VALUES ('B', '31-Mar-2015 12:00:00 AM') 20SELECT * FROM dual 21;
<11/29 追記2>
@gpsoft様のクエリを参考にさせていただきました。
SQL
1SELECT A.ID 2 , A.EVENT_DATE 3 , COUNT(B.ID) AS FREQ_PAST_1YEAR 4FROM Tbl A 5LEFT JOIN Tbl B 6ON A.ID = B.ID 7 AND B.EVENT_DATE < A.EVENT_DATE 8 AND B.EVENT_DATE > ADD_MONTHS(A.EVENT_DATE, -12) 9GROUP BY A.ID, A.EVENT_DATE 10ORDER BY A.ID, A.EVENT_DATE 11;
@gpsoft様、@sazi様、@Orlofsky様
初心者にもかかわらずご丁寧に教えていただき、大変勉強になりました。
今後質問させていただく時は、Markdownやタグ付けの徹底など留意させていただきます。
どうぞよろしくお願い申し上げます。
回答3件
あなたの回答
tips
プレビュー