回答編集履歴

8

推敲

2018/06/06 13:25

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -64,4 +64,4 @@
64
64
 
65
65
  ```
66
66
 
67
- ※テーブル定義やインデックスに定義情報があれば、もっと適な記述なるかもしれません
67
+ ※テーブル定義やインデックスに定義情報があれば、もっと適な記述なる箇所があるかもしれません

7

追記

2018/06/06 13:25

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -63,3 +63,5 @@
63
63
  and k.年月 = '2018-04-01 00:00:00'
64
64
 
65
65
  ```
66
+
67
+ ※テーブル定義やインデックスに定義情報があれば、もっと最適な記述になるかもしれません

6

修正

2018/06/06 04:51

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -42,7 +42,7 @@
42
42
 
43
43
  ,(select sum(終了時間 - 開始時間) * 24 - 1 from 勤務時間
44
44
 
45
- where 社員ID=kj.社員ID and 年月日=kj.年月
45
+ where 社員ID=kj.社員ID and to_char(年月日,'yyyy-mm')=to_char(k.年月,'yyyy-mm')
46
46
 
47
47
  ) as 合計
48
48
 

5

追記

2018/06/06 04:48

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -30,6 +30,8 @@
30
30
 
31
31
  質問のSQL文が修正されたので、それに合わせて修正。
32
32
 
33
+ ※joinなどの結合項目など、(インデックスがあれば適用されるように)最適化しています。
34
+
33
35
  ```SQL
34
36
 
35
37
  SELECT to_char(kj.開始時間,'hh24:mi') as 開始時間

4

追記

2018/06/06 04:37

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -21,3 +21,43 @@
21
21
  ```
22
22
 
23
23
  ※実際には集計期間の単位(例えば月ごと)があると思いますので、相関問い合わせのwhere 条件にはそれらも含める事になるかと思います。
24
+
25
+
26
+
27
+ 追記
28
+
29
+ ---
30
+
31
+ 質問のSQL文が修正されたので、それに合わせて修正。
32
+
33
+ ```SQL
34
+
35
+ SELECT to_char(kj.開始時間,'hh24:mi') as 開始時間
36
+
37
+ , to_char(kj.終了時間,'hh24:mi') as 終了時間
38
+
39
+ ,(kj.終了時間 - kj.開始時間) * 24 - 1 as 実働時間
40
+
41
+ ,(select sum(終了時間 - 開始時間) * 24 - 1 from 勤務時間
42
+
43
+ where 社員ID=kj.社員ID and 年月日=kj.年月日
44
+
45
+ ) as 合計
46
+
47
+ from 社員2 s
48
+
49
+ inner join 勤務予定時間 k
50
+
51
+ on s.社員ID = k.社員ID
52
+
53
+ inner join 勤務時間 kj
54
+
55
+ on k.社員ID = kj.社員ID
56
+
57
+ and to_char(k.年月,'yyyy-mm') = to_char(kj.年月日,'yyyy-mm')
58
+
59
+ where k.社員ID = '0001'
60
+
61
+ and k.年月 = '2018-04-01 00:00:00'
62
+
63
+ ```

3

修正

2018/06/06 04:33

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -14,9 +14,9 @@
14
14
 
15
15
  , (kj.終了時間 - kj.開始時間) * 24 - 1 as 実働時間
16
16
 
17
- , (select sum(kj.終了時間 - kj.開始時間) * 24 - 1 from 社員2 where id=usr.id) as 合計
17
+ , (select sum(kj.終了時間 - kj.開始時間) * 24 - 1 from 社員2 where id=kj.id) as 合計
18
18
 
19
- FROM 社員2 usr
19
+ FROM 社員2 kj
20
20
 
21
21
  ```
22
22
 

2

追記

2018/06/06 03:08

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -16,6 +16,8 @@
16
16
 
17
17
  , (select sum(kj.終了時間 - kj.開始時間) * 24 - 1 from 社員2 where id=usr.id) as 合計
18
18
 
19
- FROM 社員2 usr
19
+ FROM 社員2 usr
20
20
 
21
21
  ```
22
+
23
+ ※実際には集計期間の単位(例えば月ごと)があると思いますので、相関問い合わせのwhere 条件にはそれらも含める事になるかと思います。

1

修正

2018/06/06 03:04

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- 社員2の主キーをidとした場合、以下のようにします
5
+ 社員2の集計の単位項目をidとした場合、以下のようにします
6
6
 
7
7
  ```SQL
8
8