回答編集履歴

1

実行結果を追加

2020/11/29 13:43

投稿

gpsoft
gpsoft

スコア1323

test CHANGED
@@ -33,3 +33,61 @@
33
33
 
34
34
 
35
35
  ※`event_date`の型次第では、`DATEADD()`がエラーになるかなぁ。
36
+
37
+
38
+
39
+ [追記]
40
+
41
+ `event_date`の型が`int`とのことなので、クエリーの手直しが必要ですね。
42
+
43
+
44
+
45
+ ```sql
46
+
47
+ CREATE TABLE event(ID varchar(1), event_date int);
48
+
49
+
50
+
51
+ INSERT INTO event(ID, event_date) VALUES
52
+
53
+ ('A', 20150101)
54
+
55
+ ,('A', 20150203)
56
+
57
+ ,('A', 20150803)
58
+
59
+ ,('A', 20160201)
60
+
61
+ ,('B', 20130401)
62
+
63
+ ,('B', 20140501)
64
+
65
+ ,('B', 20150331);
66
+
67
+
68
+
69
+ SELECT EV.ID, EV.event_date, COUNT(EV2.ID) AS freq_past_1year
70
+
71
+ FROM event EV
72
+
73
+ LEFT JOIN event EV2
74
+
75
+ ON EV2.ID=EV.ID
76
+
77
+ AND EV2.event_date < EV.event_date
78
+
79
+ AND EV2.event_date > FORMAT(DATEADD(year, -1, DATEFROMPARTS(EV.event_date/10000, EV.event_date%10000/100, EV.event_date%100)), 'yyyyMMdd')
80
+
81
+ GROUP BY EV.ID, EV.event_date
82
+
83
+ ORDER BY EV.ID, EV.event_date;
84
+
85
+ ```
86
+
87
+
88
+
89
+ 以下、SQL Server 2012での実行結果です。
90
+
91
+
92
+
93
+ ![イメージ説明](456af22726f9127f00b4952d005d5bab.png)