回答編集履歴
6
追記
answer
CHANGED
@@ -31,4 +31,28 @@
|
|
31
31
|
group by 名前
|
32
32
|
)
|
33
33
|
```
|
34
|
-
※手元には8.0の環境はありませんので、確認は出来ておらず、エラーになるかもしれません。
|
34
|
+
※手元には8.0の環境はありませんので、確認は出来ておらず、エラーになるかもしれません。
|
35
|
+
|
36
|
+
他のセッションの影響を受けないように一時テーブルをパラメータに利用するようにすると、SQLを動的に変更する必要は無くなります。
|
37
|
+
```SQL
|
38
|
+
CREATE TEMPORARY TABLE para (
|
39
|
+
指定名前 text
|
40
|
+
, 指定日付 date
|
41
|
+
) ON COMMIT DELETE ROWS
|
42
|
+
;
|
43
|
+
```
|
44
|
+
```SQL
|
45
|
+
insert into para values
|
46
|
+
('田中', '2021-03-15')
|
47
|
+
,('鈴木', '2021-03-14')
|
48
|
+
;
|
49
|
+
SELECT *
|
50
|
+
FROM テーブル
|
51
|
+
where (名前, 日付) in (
|
52
|
+
select 名前, MAX(日付)
|
53
|
+
FROM テーブル t inner join para p
|
54
|
+
on t.名前=p.指定名前 and t.日付<=p.指定日付
|
55
|
+
group by 名前
|
56
|
+
)
|
57
|
+
;
|
58
|
+
```
|
5
追記
answer
CHANGED
@@ -13,4 +13,22 @@
|
|
13
13
|
group by 名前
|
14
14
|
)
|
15
15
|
```
|
16
|
-
※性能を求めるなら(名前,日付)のインデックスが必要です。
|
16
|
+
※性能を求めるなら(名前,日付)のインデックスが必要です。
|
17
|
+
追記
|
18
|
+
--
|
19
|
+
Postgresのバージョンが8.0との事なので、パラメータの指定が分かりにくくなりますが、unnest()を使用した例です。
|
20
|
+
```SQL
|
21
|
+
SELECT *
|
22
|
+
FROM テーブル
|
23
|
+
where (名前, 日付) in (
|
24
|
+
select 名前, MAX(日付)
|
25
|
+
FROM テーブル t inner join (
|
26
|
+
select
|
27
|
+
unnest(array['田中','鈴木']::text[]) as 指定名前
|
28
|
+
, unnest(array['2021-03-15', '2021-03-14']::date[]) as 指定日付
|
29
|
+
) p
|
30
|
+
on t.名前=p.指定名前 and t.日付<=p.指定日付
|
31
|
+
group by 名前
|
32
|
+
)
|
33
|
+
```
|
34
|
+
※手元には8.0の環境はありませんので、確認は出来ておらず、エラーになるかもしれません。
|
4
推敲
answer
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
SELECT *
|
3
3
|
FROM テーブル
|
4
4
|
where (名前, 日付) in (
|
5
|
-
select
|
5
|
+
select 名前, MAX(日付)
|
6
6
|
FROM テーブル t inner join (
|
7
7
|
select * from (values
|
8
8
|
('田中', '2021-03-15' ::date)
|
@@ -10,7 +10,7 @@
|
|
10
10
|
) as w(指定名前,指定日付)
|
11
11
|
) p
|
12
12
|
on t.名前=p.指定名前 and t.日付<=p.指定日付
|
13
|
-
group by
|
13
|
+
group by 名前
|
14
14
|
)
|
15
15
|
```
|
16
16
|
※性能を求めるなら(名前,日付)のインデックスが必要です。
|
3
推敲
answer
CHANGED
@@ -7,9 +7,9 @@
|
|
7
7
|
select * from (values
|
8
8
|
('田中', '2021-03-15' ::date)
|
9
9
|
,('鈴木', '2021-03-14' ::date)
|
10
|
-
) as w(名前,指定日付)
|
10
|
+
) as w(指定名前,指定日付)
|
11
11
|
) p
|
12
|
-
on t.名前=p.名前 and t.日付<=p.指定日付
|
12
|
+
on t.名前=p.指定名前 and t.日付<=p.指定日付
|
13
13
|
group by t.名前
|
14
14
|
)
|
15
15
|
```
|
2
推敲
answer
CHANGED
@@ -7,9 +7,9 @@
|
|
7
7
|
select * from (values
|
8
8
|
('田中', '2021-03-15' ::date)
|
9
9
|
,('鈴木', '2021-03-14' ::date)
|
10
|
-
) as w(名前,
|
10
|
+
) as w(名前,指定日付)
|
11
11
|
) p
|
12
|
-
on t.名前=p.名前 and t.日付<=p.
|
12
|
+
on t.名前=p.名前 and t.日付<=p.指定日付
|
13
13
|
group by t.名前
|
14
14
|
)
|
15
15
|
```
|
1
追記
answer
CHANGED
@@ -12,4 +12,5 @@
|
|
12
12
|
on t.名前=p.名前 and t.日付<=p.基準日付
|
13
13
|
group by t.名前
|
14
14
|
)
|
15
|
-
```
|
15
|
+
```
|
16
|
+
※性能を求めるなら(名前,日付)のインデックスが必要です。
|