回答編集履歴

5

追記

2018/03/12 07:55

投稿

sazi
sazi

スコア25195

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

推敲

2018/03/12 07:55

投稿

sazi
sazi

スコア25195

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

追記

2018/03/12 05:52

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -21,3 +21,5 @@
21
21
  ```
22
22
 
23
23
  尚、性能を考えた場合には(user_id, date)のインデックスがあればよいかと。
24
+
25
+ ※上記はプライマリーとして定義されている気もしますので、そうであれば敢えて追加の必要はありません。

2

推敲

2018/03/12 05:25

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  で要件としては、各行に対して過去3カ月以内にポイントが付与されているかということであれば、
6
6
 
7
- 日付順でみて直前のデータが3カ月以内かどうかを判断すればいいので、Window関数が使用できます。
7
+ 日付順でみて直前のデータが3カ月以内かどうかを判断すればいいので、Window関数が使用できます。
8
8
 
9
9
  ```SQL
10
10
 

1

推敲

2018/03/12 05:17

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- で要件としては、各行に対して過去3カ月以内にポイントが付与されているかということであれば、
5
+ で要件としては、各行に対して過去3カ月以内にポイントが付与されているかということであれば、
6
6
 
7
7
  日付順でみて直前のデータが3カ月以内かかどうかを判断すればいいので、Window関数が使用できます。
8
8