回答編集履歴

2

推敲

2020/08/19 00:47

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
 
8
8
 
9
- access/oracleどちらでも大丈夫ですが、リンクテーブルで遅いようならパススリークエリーに変更した補王が良いかと思います。
9
+ access/oracleどちらでも大丈夫ですが、リンクテーブルで遅いようならパススリークエリーに変更したが良いかと思います。
10
10
 
11
11
  ```SQL
12
12
 

1

追記

2020/08/19 00:47

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -3,3 +3,43 @@
3
3
  検索のキーワードは「SQL 直近」で。
4
4
 
5
5
  それに加え、リンクテーブルなら「Access」を、パススルーなら「oracle」をキーワードに加えて下さい。
6
+
7
+
8
+
9
+ access/oracleどちらでも大丈夫ですが、リンクテーブルで遅いようならパススリークエリーに変更した補王が良いかと思います。
10
+
11
+ ```SQL
12
+
13
+ select 開始.ID, 開始.日付 as 開始日, min(終了.日付) as 終了日
14
+
15
+ from (
16
+
17
+ select * from テーブルA where 区分='開始'
18
+
19
+ ) as 開始
20
+
21
+ left join (
22
+
23
+ select * from テーブルA where 区分='終了'
24
+
25
+ ) as 終了
26
+
27
+ on 開始.ID = 終了.ID and 開始.日付 < 終了.日付
28
+
29
+ group by 開始.ID, 開始.日付
30
+
31
+ ```
32
+
33
+ oracleだと分析関数が使用できるので、lag()を使用すると以下の様な記述にもできます。
34
+
35
+ ```SQL
36
+
37
+ select ID, 日付 as 開始日
38
+
39
+ , lag(日付) over(partition by ID order by 日付) as 終了日
40
+
41
+ from テーブルA
42
+
43
+ where 日付='開始'
44
+
45
+ ```