回答編集履歴
5
追記
test
CHANGED
@@ -23,3 +23,33 @@
|
|
23
23
|
尚、性能を考えた場合には(user_id, date)のインデックスがあればよいかと。
|
24
24
|
|
25
25
|
※上記はプライマリーとして定義されている気もしますので、そうであれば敢えて追加の必要はありません。
|
26
|
+
|
27
|
+
追記(ポイントでの判断)
|
28
|
+
|
29
|
+
---
|
30
|
+
|
31
|
+
```SQL
|
32
|
+
|
33
|
+
select *, case when exist_point>0 then '既存' else '新規' end as new_or_existing
|
34
|
+
|
35
|
+
from (
|
36
|
+
|
37
|
+
select *
|
38
|
+
|
39
|
+
,(select sum(point)
|
40
|
+
|
41
|
+
from point_rireki
|
42
|
+
|
43
|
+
where user_id=main.user_id and "date" >= main."date" - interval '3 months' and "date" < main."date"
|
44
|
+
|
45
|
+
) as exist_point
|
46
|
+
|
47
|
+
from point_rireki main
|
48
|
+
|
49
|
+
) step1
|
50
|
+
|
51
|
+
order by user_id, date
|
52
|
+
|
53
|
+
```
|
54
|
+
|
55
|
+
これだと結局性能はインデックス次第だと思います。
|
4
推敲
test
CHANGED
@@ -12,7 +12,7 @@
|
|
12
12
|
|
13
13
|
from (
|
14
14
|
|
15
|
-
select *,lag("date") over(partition by user_id order by date) lag_date
|
15
|
+
select *,lag("date") over(partition by user_id order by "date") lag_date
|
16
16
|
|
17
17
|
from point_rireki
|
18
18
|
|
3
追記
test
CHANGED
@@ -21,3 +21,5 @@
|
|
21
21
|
```
|
22
22
|
|
23
23
|
尚、性能を考えた場合には(user_id, date)のインデックスがあればよいかと。
|
24
|
+
|
25
|
+
※上記はプライマリーとして定義されている気もしますので、そうであれば敢えて追加の必要はありません。
|
2
推敲
test
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
で要件としては、各行に対して過去3カ月以内にポイントが付与されているかということであれば、
|
6
6
|
|
7
|
-
日付順でみて直前のデータが3カ月以内か
|
7
|
+
日付順でみて直前のデータが3カ月以内かどうかを判断すればいいので、Window関数が使用できます。
|
8
8
|
|
9
9
|
```SQL
|
10
10
|
|
1
推敲
test
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
で要件としては、各行に対して過去3カ月以内にポイントが付与されてい
|
5
|
+
で要件としては、各行に対して過去3カ月以内にポイントが付与されているかということであれば、
|
6
6
|
|
7
7
|
日付順でみて直前のデータが3カ月以内かかどうかを判断すればいいので、Window関数が使用できます。
|
8
8
|
|