teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

推敲

2020/08/19 00:47

投稿

sazi
sazi

スコア25430

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

追記

2020/08/19 00:47

投稿

sazi
sazi

スコア25430

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
+ ```