MySQLにて、勤怠プログラムを作成しているのですが、例えば出勤時間と退勤時間をそれぞれdatetime型で保持していたとして、「1ヶ月間の勤務時間の合計を算出」と言った形であれば
SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF( '退勤時間', '出勤時間' )))) AS WORK_TIME FROM 'テーブル名'
のような形で算出できるかと思いますが、例えば、「1ヶ月間の残業時間の合計を算出」といったことはSQL文のみで実現可能なのでしょうか?ちなみに残業時間の定義は「平日の18時以降、土日出勤時間は除く」となります。
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
>土日出勤時間は除く
土日のような処理は危険、土日が営業日のこともあるでしょうし、
土日以外が祝日でやすみの場合もあるでしょう。
そういうときのため会社自体の営業日をベースに処理していいなら
営業日テーブルをつくっておくと便利です。
(個人ごとに出勤シフトが違う場合はこまかい調整が必要ですが)
以下サンプル
/* 勤怠テーブル作成 */
create table 勤怠(
社員ID varchar(10) not null,勤務日 date not null,出社 time,退社 time
,primary key (社員ID,勤務日)
);
insert into 勤怠(社員ID,勤務日,出社,退社) values(
'10000','2011-01-01','9:30','12:00'),(
'10000','2011-01-02','9:30','12:00'),(
'10000','2011-01-03','9:30','12:00'),(
'10000','2011-01-04','9:30','12:00'),(
'10000','2011-01-05','9:30','18:00'),(
'10000','2011-01-06','9:30','18:10'),(
'10000','2011-01-07','9:30','18:20'),(
'10000','2011-01-08','9:30','18:30'),(
'10000','2011-01-09','9:30','18:10'),(
'10000','2011-01-10','9:30','18:20'),(
'10000','2011-01-11','9:30','18:30'),(
'10000','2011-01-12','9:30','18:10'),(
'10000','2011-01-13','9:30','18:20'),(
'10000','2011-01-14','9:30','18:30');
/* 営業日テーブル作成 1,2,3,10は祝日、8,9は土日*/
create table 営業日(
営業日 date not null primary key);
insert into 営業日 values(
'2011-01-04'),(
'2011-01-05'),(
'2011-01-06'),(
'2011-01-07'),(
'2011-01-11'),(
'2011-01-12'),(
'2011-01-13'),(
'2011-01-14');
/* 平日の残業時間を集計 */
select sum(time_to_sec(timediff(退社,'18:00') * (退社>'18:00')))
from 勤怠
INNER JOIN 営業日 ON 営業日=勤務日
where 1
AND 社員ID='10000'
AND 勤務日 BETWEEN '2011-01-01' AND '2011-01-31';
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 勤務表ですが、思うように出来ません。 3 2023/05/19 06:43
- その他(Microsoft Office) Excel 勤務時間の計算について~(残業)有.無しの場合。 4 2022/07/17 21:03
- Excel(エクセル) エクセルの早退時間を計算したいです。計算はうまくいっているようですが… 1 2022/12/26 16:22
- 労働相談 今月から専門職フルタイムパートで働きはじめました。 面接の段階では、8時間勤務で残業はほぼないとの事 3 2022/07/09 20:48
- アルバイト・パート 22年10月から社会保険適用拡大について、詳しい方いらっしゃいましたら教えてください 2 2022/09/01 20:40
- その他(ビジネス・キャリア) 日報の実務労働時間の集計について困っています。 2 2023/06/09 19:00
- Visual Basic(VBA) VBAで時間(00:00形式)を積算(足し算)したい 1 2022/11/15 17:04
- その他(Microsoft Office) 勤務表のエクセル作成で数式を教えてください。 1 2023/01/17 03:27
- 会社・職場 計算できる方がいらしたら教えてください。 私は元々フルタイムの正社員で勤めていて、そのときの月収は約 6 2023/06/23 14:19
- 飲食業・宿泊業・レジャー 休憩・残業時間の自動算出 1 2023/01/07 22:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
一つ前に戻るには…
-
最大値を持つレコードを削除したい
-
mysqlのフィールド名
-
mysqlでJOIN文
-
Accessでデータシートに同じデ...
-
他のデータベースとのテーブル結合
-
SELECT 文の NULL列は?
-
テーブル名をカラムとして取得...
-
外部キーだけのテーブル(主キ...
-
L2SWはARPテーブルを持っている?
-
ビューのソートについて
-
update文で改行を入れる
-
Accessのテーブルデータを一気...
-
会社の飲み会の幹事になり、座...
-
SQLでSUMなどの関数でデータが...
-
SQL*LoaderでCSVから指定した列...
-
SQL 複数テーブルのupdate
-
SQL、2つのテーブルで条件一致...
-
MySQLで複数テーブルを作成する
-
ERROR1062:Duplicate entry.......
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
一つ前に戻るには…
-
mysqlで外部キーをつけたカラム...
-
1列について重複行を除いて全列...
-
最大値を持つレコードを削除したい
-
mysqlでJOIN文
-
mysqlのフィールド名
-
ビューに追加・削除が出来ません。
-
SQL一発でカレンダー表示は可能...
-
グループからランダムに抽出す...
-
【ストアドプロシージャ】条件...
-
外部キー、親を調べるにはshow ...
-
1000万件のデータをmysqlで効率...
-
複数の列にまたがってユニーク...
-
テーブル作成時のエラーについ...
-
MYSQLのフィールドにユニークキ...
-
LIKEについてです。
-
SQL文による残業時間の算出につ...
-
DBの文字コード切り替え
-
MySQL INSERT文 エラー
-
テーブルが作成できない
おすすめ情報