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

回答編集履歴

8

推敲

2018/06/06 13:25

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -31,4 +31,4 @@
31
31
  where k.社員ID = '0001'
32
32
  and k.年月 = '2018-04-01 00:00:00'
33
33
  ```
34
- ※テーブル定義やインデックスに定義情報があれば、もっと適な記述なるかもしれません
34
+ ※テーブル定義やインデックスに定義情報があれば、もっと適な記述なる箇所があるかもしれません

7

追記

2018/06/06 13:25

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -30,4 +30,5 @@
30
30
  and to_char(k.年月,'yyyy-mm') = to_char(kj.年月日,'yyyy-mm')
31
31
  where k.社員ID = '0001'
32
32
  and k.年月 = '2018-04-01 00:00:00'
33
- ```
33
+ ```
34
+ ※テーブル定義やインデックスに定義情報があれば、もっと最適な記述になるかもしれません

6

修正

2018/06/06 04:51

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -20,7 +20,7 @@
20
20
  , to_char(kj.終了時間,'hh24:mi') as 終了時間
21
21
  ,(kj.終了時間 - kj.開始時間) * 24 - 1 as 実働時間
22
22
  ,(select sum(終了時間 - 開始時間) * 24 - 1 from 勤務時間
23
- where 社員ID=kj.社員ID and 年月日=kj.年月
23
+ where 社員ID=kj.社員ID and to_char(年月日,'yyyy-mm')=to_char(k.年月,'yyyy-mm')
24
24
  ) as 合計
25
25
  from 社員2 s
26
26
  inner join 勤務予定時間 k

5

追記

2018/06/06 04:48

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -14,6 +14,7 @@
14
14
  追記
15
15
  ---
16
16
  質問のSQL文が修正されたので、それに合わせて修正。
17
+ ※joinなどの結合項目など、(インデックスがあれば適用されるように)最適化しています。
17
18
  ```SQL
18
19
  SELECT to_char(kj.開始時間,'hh24:mi') as 開始時間
19
20
  , to_char(kj.終了時間,'hh24:mi') as 終了時間

4

追記

2018/06/06 04:37

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -9,4 +9,24 @@
9
9
  , (select sum(kj.終了時間 - kj.開始時間) * 24 - 1 from 社員2 where id=kj.id) as 合計
10
10
  FROM 社員2 kj
11
11
  ```
12
- ※実際には集計期間の単位(例えば月ごと)があると思いますので、相関問い合わせのwhere 条件にはそれらも含める事になるかと思います。
12
+ ※実際には集計期間の単位(例えば月ごと)があると思いますので、相関問い合わせのwhere 条件にはそれらも含める事になるかと思います。
13
+
14
+ 追記
15
+ ---
16
+ 質問のSQL文が修正されたので、それに合わせて修正。
17
+ ```SQL
18
+ SELECT to_char(kj.開始時間,'hh24:mi') as 開始時間
19
+ , to_char(kj.終了時間,'hh24:mi') as 終了時間
20
+ ,(kj.終了時間 - kj.開始時間) * 24 - 1 as 実働時間
21
+ ,(select sum(終了時間 - 開始時間) * 24 - 1 from 勤務時間
22
+ where 社員ID=kj.社員ID and 年月日=kj.年月日
23
+ ) as 合計
24
+ from 社員2 s
25
+ inner join 勤務予定時間 k
26
+ on s.社員ID = k.社員ID
27
+ inner join 勤務時間 kj
28
+ on k.社員ID = kj.社員ID
29
+ and to_char(k.年月,'yyyy-mm') = to_char(kj.年月日,'yyyy-mm')
30
+ where k.社員ID = '0001'
31
+ and k.年月 = '2018-04-01 00:00:00'
32
+ ```

3

修正

2018/06/06 04:33

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -6,7 +6,7 @@
6
6
  , to_char(kj.開始時間,'hh24:mi') as 開始時間
7
7
  , to_char(kj.終了時間,'hh24:mi') as 終了時間
8
8
  , (kj.終了時間 - kj.開始時間) * 24 - 1 as 実働時間
9
- , (select sum(kj.終了時間 - kj.開始時間) * 24 - 1 from 社員2 where id=usr.id) as 合計
9
+ , (select sum(kj.終了時間 - kj.開始時間) * 24 - 1 from 社員2 where id=kj.id) as 合計
10
- FROM 社員2 usr
10
+ FROM 社員2 kj
11
11
  ```
12
12
  ※実際には集計期間の単位(例えば月ごと)があると思いますので、相関問い合わせのwhere 条件にはそれらも含める事になるかと思います。

2

追記

2018/06/06 03:08

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -7,5 +7,6 @@
7
7
  , to_char(kj.終了時間,'hh24:mi') as 終了時間
8
8
  , (kj.終了時間 - kj.開始時間) * 24 - 1 as 実働時間
9
9
  , (select sum(kj.終了時間 - kj.開始時間) * 24 - 1 from 社員2 where id=usr.id) as 合計
10
- FROM 社員2 usr
10
+ FROM 社員2 usr
11
- ```
11
+ ```
12
+ ※実際には集計期間の単位(例えば月ごと)があると思いますので、相関問い合わせのwhere 条件にはそれらも含める事になるかと思います。

1

修正

2018/06/06 03:04

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  相関副問合せになっていないので、全員分の実働時間の合計が算出されています。
2
2
 
3
- 社員2の主キーをidとした場合、以下のようにします
3
+ 社員2の集計の単位項目をidとした場合、以下のようにします
4
4
  ```SQL
5
5
  SELECT id
6
6
  , to_char(kj.開始時間,'hh24:mi') as 開始時間