teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

実行結果を追加

2020/11/29 13:43

投稿

gpsoft
gpsoft

スコア1323

answer CHANGED
@@ -15,4 +15,33 @@
15
15
 
16
16
  ※「過去1年間」の意味次第では、`>`を`>=`に変えるべきかも。
17
17
 
18
- ※`event_date`の型次第では、`DATEADD()`がエラーになるかなぁ。
18
+ ※`event_date`の型次第では、`DATEADD()`がエラーになるかなぁ。
19
+
20
+ [追記]
21
+ `event_date`の型が`int`とのことなので、クエリーの手直しが必要ですね。
22
+
23
+ ```sql
24
+ CREATE TABLE event(ID varchar(1), event_date int);
25
+
26
+ INSERT INTO event(ID, event_date) VALUES
27
+ ('A', 20150101)
28
+ ,('A', 20150203)
29
+ ,('A', 20150803)
30
+ ,('A', 20160201)
31
+ ,('B', 20130401)
32
+ ,('B', 20140501)
33
+ ,('B', 20150331);
34
+
35
+ SELECT EV.ID, EV.event_date, COUNT(EV2.ID) AS freq_past_1year
36
+ FROM event EV
37
+ LEFT JOIN event EV2
38
+ ON EV2.ID=EV.ID
39
+ AND EV2.event_date < EV.event_date
40
+ AND EV2.event_date > FORMAT(DATEADD(year, -1, DATEFROMPARTS(EV.event_date/10000, EV.event_date%10000/100, EV.event_date%100)), 'yyyyMMdd')
41
+ GROUP BY EV.ID, EV.event_date
42
+ ORDER BY EV.ID, EV.event_date;
43
+ ```
44
+
45
+ 以下、SQL Server 2012での実行結果です。
46
+
47
+ ![イメージ説明](456af22726f9127f00b4952d005d5bab.png)