回答編集履歴
4
追記
answer
CHANGED
@@ -13,4 +13,19 @@
|
|
13
13
|
```
|
14
14
|
※1年前の算出は単に単に年から-1しているだけですので、閏年などは考慮していません。
|
15
15
|
(1日分の誤差が生じる)
|
16
|
-
閏年の考慮が必要なら、日付型に変更して演算して下さい。
|
16
|
+
閏年の考慮が必要なら、日付型に変更して演算して下さい。
|
17
|
+
|
18
|
+
追記
|
19
|
+
--
|
20
|
+
質問に追記された内容を相関サブクエリーに変更してみました。
|
21
|
+
```SQL
|
22
|
+
SELECT A.ID
|
23
|
+
, A.EVENT_DATE
|
24
|
+
, (select COUNT(ID) from tbl
|
25
|
+
where ID = A.ID
|
26
|
+
AND EVENT_DATE < A.EVENT_DATE
|
27
|
+
AND EVENT_DATE > ADD_MONTHS(A.EVENT_DATE, -12)
|
28
|
+
) AS FREQ_PAST_1YEAR
|
29
|
+
FROM Tbl A
|
30
|
+
;
|
31
|
+
```
|
3
推敲
answer
CHANGED
@@ -11,4 +11,6 @@
|
|
11
11
|
from tbl t1
|
12
12
|
order by ID, event_date
|
13
13
|
```
|
14
|
-
※閏年などは考慮していません。
|
14
|
+
※1年前の算出は単に単に年から-1しているだけですので、閏年などは考慮していません。
|
15
|
+
(1日分の誤差が生じる)
|
16
|
+
閏年の考慮が必要なら、日付型に変更して演算して下さい。
|
2
推敲
answer
CHANGED
@@ -10,4 +10,5 @@
|
|
10
10
|
) as freq_past_1year
|
11
11
|
from tbl t1
|
12
12
|
order by ID, event_date
|
13
|
-
```
|
13
|
+
```
|
14
|
+
※閏年などは考慮していません。
|
1
訂正
answer
CHANGED
@@ -1,29 +1,13 @@
|
|
1
|
-
> 「各IDごとに過去1年間に起きたイベント回数を、イベントの日付ごとに求める」
|
2
|
-
|
3
|
-
という事ですが、質問のfreq_past_1yearの例ではその通りになっていません。
|
4
|
-
|
5
|
-
|
1
|
+
質問の意図を読み違えていたので、訂正しました。
|
6
|
-
|
7
|
-
|
2
|
+
相関サブクエリーを用いています。
|
8
|
-
|
9
|
-
年だとすると以下です。
|
10
3
|
```SQL
|
11
4
|
select *
|
5
|
+
, (
|
6
|
+
select count(*) from tbl
|
7
|
+
where id = t1.id
|
12
|
-
|
8
|
+
and event_date >= t1.event_date -10000
|
9
|
+
and event_date < t1.event_date
|
10
|
+
) as freq_past_1year
|
13
|
-
from tbl
|
11
|
+
from tbl t1
|
14
12
|
order by ID, event_date
|
15
|
-
```
|
16
|
-
|
17
|
-
年度(4月から3月)という事なら、-3か月して年度に変換します。
|
18
|
-
```SQL
|
19
|
-
select *
|
20
|
-
, count(*)
|
21
|
-
over(
|
22
|
-
partition by
|
23
|
-
ID
|
24
|
-
, year(dateadd(month, -3,cast(format(event_date, '0000/00/00') as date)))
|
25
|
-
order by event_date
|
26
|
-
) -1 as freq_past_1year
|
27
|
-
from tbl
|
28
|
-
order by ID, event_date
|
29
13
|
```
|