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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
一つ前に戻るには…
-
1列について重複行を除いて全列...
-
mysqlでJOIN文
-
複数の列にまたがってユニーク...
-
SELECT 文の NULL列は?
-
L2SWはARPテーブルを持っている?
-
sqlplusで表示が変なので、出力...
-
Accessでデータシートに同じデ...
-
SQLでSUMなどの関数でデータが...
-
update文で改行を入れる
-
アクセスのリンクテーブル一覧...
-
テーブル名をカラムとして取得...
-
SQLにて指定日付より前、かつ最...
-
Oracleで上書きImportはできま...
-
テーブルリンク リンク元を知...
-
お金持ちのテーブル
-
「テーブルに座って……」という...
-
Accessのテーブルデータを一気...
-
まるいテーブル 円い 丸い 漢字...
-
ビューのソートについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
一つ前に戻るには…
-
mysqlでJOIN文
-
PHP上のSQLで、SELECT文をいく...
-
python2.5を使用してSQLite3の...
-
1列について重複行を除いて全列...
-
SQL文による残業時間の算出につ...
-
MySQLのエラーの意味
-
ビューに追加・削除が出来ません。
-
グループからランダムに抽出す...
-
外部キー、親を調べるにはshow ...
-
副問合せ?の書き方
-
一時テーブルでの作業
-
MySQLのFOREIGN KEYについて
-
mysqlで外部キーをつけたカラム...
-
連番の質問
-
挿入先テーブルに存在しないレ...
-
MySQLのテーブル設計について
-
最大値を持つレコードを削除したい
-
SQL一発でカレンダー表示は可能...
-
MySQL5.1 で外部キーの動作を検...
おすすめ情報