回答編集履歴

6

修正

2017/08/30 04:05

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -1,7 +1,3 @@
1
- こんにちは。
2
-
3
-
4
-
5
1
  こんな感じでどうでしょうか。
6
2
 
7
3
  概略としては、
@@ -12,7 +8,7 @@
12
8
 
13
9
  (最初の空き時間はテーブルAから求めているので、NUll判定で除去)
14
10
 
15
- ・上記をUNIONでマージ(予定が無い場合はUNIONでマージされて結果テーブルAと同じになる)
11
+ ・上記をUNIONでマージ(予定が無い場合はUNIONでマージされて結果テーブルAと同じになる)
16
12
 
17
13
 
18
14
 

5

修正

2017/08/30 04:05

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -26,6 +26,8 @@
26
26
 
27
27
  from tbla as ta
28
28
 
29
+ where 開始時刻<((select min(開始時刻) from tblb where 場所CD=ta.場所CD and 日付=ta.日付))
30
+
29
31
  union
30
32
 
31
33
  select 日付, 場所CD, 前回終了時刻, 開始時刻
@@ -44,6 +46,8 @@
44
46
 
45
47
  from tbla as ta
46
48
 
49
+ where 終了時刻>((select max(終了時刻) from tblb where 場所CD=ta.場所CD and 日付=ta.日付))
50
+
47
51
  order by 場所CD,日付,開始時刻
48
52
 
49
53
  ```

4

修正

2017/08/30 02:37

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -44,7 +44,7 @@
44
44
 
45
45
  from tbla as ta
46
46
 
47
- order by 日付,開始時刻,場所CD
47
+ order by 場所CD,日付,開始時刻
48
48
 
49
49
  ```
50
50
 

3

修正

2017/08/30 01:54

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -30,7 +30,7 @@
30
30
 
31
31
  select 日付, 場所CD, 前回終了時刻, 開始時刻
32
32
 
33
- from (select *, lag(終了時刻,1) over(order by 日付, 開始時刻) as 前回終了時刻 from tblb) tmp
33
+ from (select *, lag(終了時刻,1) over(partition by 場所CD, 日付 order by, 開始時刻) as 前回終了時刻 from tblb) tmp
34
34
 
35
35
  where 前回終了時刻 is not null
36
36
 

2

修正

2017/08/30 01:49

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -47,3 +47,5 @@
47
47
  order by 日付,開始時刻,場所CD
48
48
 
49
49
  ```
50
+
51
+ 手っ取り早くunionにしていますが、時間がかかるようなら除外条件(予定が無い場合)をいれて、union allとすれば、unionマージの時間は省けます。

1

修正

2017/08/30 01:40

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
  , 開始時刻
24
24
 
25
- , coalesce((select min(開始時刻) from tblb where 日付=ta.日付), 終了時刻) as 終了時刻
25
+ , coalesce((select min(開始時刻) from tblb where 場所CD=ta.場所CD and 日付=ta.日付), 終了時刻) as 終了時刻
26
26
 
27
27
  from tbla as ta
28
28
 
@@ -38,7 +38,7 @@
38
38
 
39
39
  select 日付, 場所CD
40
40
 
41
- , coalesce((select max(終了時刻) from tblb where 日付=ta.日付), 開始時刻)
41
+ , coalesce((select max(終了時刻) from tblb where 場所CD=ta.場所CD and 日付=ta.日付), 開始時刻)
42
42
 
43
43
  , 終了時刻
44
44