回答編集履歴
2
推敲
answer
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
検索のキーワードは「SQL 直近」で。
|
3
3
|
それに加え、リンクテーブルなら「Access」を、パススルーなら「oracle」をキーワードに加えて下さい。
|
4
4
|
|
5
|
-
access/oracleどちらでも大丈夫ですが、リンクテーブルで遅いようならパススリークエリーに変更した
|
5
|
+
access/oracleどちらでも大丈夫ですが、リンクテーブルで遅いようならパススリークエリーに変更した方が良いかと思います。
|
6
6
|
```SQL
|
7
7
|
select 開始.ID, 開始.日付 as 開始日, min(終了.日付) as 終了日
|
8
8
|
from (
|
1
追記
answer
CHANGED
@@ -1,3 +1,23 @@
|
|
1
1
|
リンクテーブル経由ですか?それともパススルーですか?
|
2
2
|
検索のキーワードは「SQL 直近」で。
|
3
|
-
それに加え、リンクテーブルなら「Access」を、パススルーなら「oracle」をキーワードに加えて下さい。
|
3
|
+
それに加え、リンクテーブルなら「Access」を、パススルーなら「oracle」をキーワードに加えて下さい。
|
4
|
+
|
5
|
+
access/oracleどちらでも大丈夫ですが、リンクテーブルで遅いようならパススリークエリーに変更した補王が良いかと思います。
|
6
|
+
```SQL
|
7
|
+
select 開始.ID, 開始.日付 as 開始日, min(終了.日付) as 終了日
|
8
|
+
from (
|
9
|
+
select * from テーブルA where 区分='開始'
|
10
|
+
) as 開始
|
11
|
+
left join (
|
12
|
+
select * from テーブルA where 区分='終了'
|
13
|
+
) as 終了
|
14
|
+
on 開始.ID = 終了.ID and 開始.日付 < 終了.日付
|
15
|
+
group by 開始.ID, 開始.日付
|
16
|
+
```
|
17
|
+
oracleだと分析関数が使用できるので、lag()を使用すると以下の様な記述にもできます。
|
18
|
+
```SQL
|
19
|
+
select ID, 日付 as 開始日
|
20
|
+
, lag(日付) over(partition by ID order by 日付) as 終了日
|
21
|
+
from テーブルA
|
22
|
+
where 日付='開始'
|
23
|
+
```
|