• ベストアンサー

SQL文による残業時間の算出について

MySQLにて、勤怠プログラムを作成しているのですが、例えば出勤時間と退勤時間をそれぞれdatetime型で保持していたとして、「1ヶ月間の勤務時間の合計を算出」と言った形であれば SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF( '退勤時間', '出勤時間' )))) AS WORK_TIME FROM 'テーブル名' のような形で算出できるかと思いますが、例えば、「1ヶ月間の残業時間の合計を算出」といったことはSQL文のみで実現可能なのでしょうか?ちなみに残業時間の定義は「平日の18時以降、土日出勤時間は除く」となります。 よろしくお願いします。

  • MySQL
  • 回答数1
  • ありがとう数5

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答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';

suzuparrow
質問者

お礼

ご連絡が遅くなり申し訳ございません。 ご回答頂きどうもありがとうございました。 とても参考になりました。

関連するQ&A

  • 深夜残業時間の算出とIFEROORについて

    勤怠管理表から以下の2つを求める関数を教えてください。 <勤怠管理表フォーマット> 出勤時間/退勤時間/休憩時間/実働時間/深夜残業時間 1.深夜残業時間について 出勤時間/退勤時間/休憩時間/実働時間/深夜残業時間 10:00    23:25    1:00     12:25    1:25 単純に22:00時以降の時間だけを求めたいと思っています。 2.実働時間のIFEROORについて 休暇や欠勤で出勤/退勤の項目が未入力の場合は、 実働時間に「-」を入れたいと思っています。 ただ、通常は、=退勤時間-出勤時間-TIME(1,0,0)の関数が入っていますが 組合せ方が分かりません。 以上、2つのご回答をお願いします。

  • エクセル 残業時間の計算

    いつもお世話になります。 エクセルで勤怠表を作っています。 出勤時間・・・D8 退勤時間・・・D9  に書く事にした時、 残業時間をD13に表示させたいのですが上手くいきません。 関数を教えて頂けると助かります。 定時時間:8:00~17:00 残業時間:17:01~22:00、5:30~8:00 深夜残業時間:22:01~5:30 尚、時間は30分単位で切り下げです。 宜しくお願い致します。

  • 残業時間の予測の時間を算出するには?

    残業時間の予測の時間を算出するには どのような計算をすれば宜しいですか? 例えば、年間の残業時間が600時間だとして それを12ヶ月で割って、1ヶ月の平均残業時間を出して そこから翌月の残業時間を算出するという計算は 思いつきました。 ただ、これですと、 季節によって、 または仕事の種類によって  (例えば4月~5月は事務系の仕事、6月は営業の仕事など) 曜日によって 変動の仕方が変わってくると思いますので その辺りを考慮に入れた予測時間を算出したいのですが・・・。

  • 時間の算出方法

    エクセルで22時以降の時間算出『22:00-22:15=0:15』という風に出したいのですが、どうすればよいのでしょうか? ちなみに22時以降は0:15分50円の計算です。 出勤   退勤   休憩   支払時間   22時以降  通常時給   22時以降   合計支給 15:00   23:30   0:30     8:00       1:00      ¥6,400     ¥200     ¥6,600 お力をお貸しください。

  • 残業時間を計算したい

    約2年間分の残業時間を計算したいのですが、会社の出退勤システムから出力したCSVファイルから上手く計算する関数などアドバイスください。 表は、下記のような形になっています。 ------------ C列(日付) 2012/10/1 D列(出勤時刻) 10:27 E列(退勤時刻) 19:58 ------------ これだけなら、E列からD列を引けば、会社にいた時間が出てくるので そこから8時間+1時間(昼休憩)引けば残業時間が求められるのですが、日をまたいで働くなどすると ----------- D列(出勤時刻) 10:25 E列(退勤時刻) 03:58 ----------- なんて行も存在するため、計算がめちゃめちゃになってしまいます。 日付をまたいだ行も含めて、その日、出勤~退勤まで何時間会社にいたのかを計算するためにはどんな計算式を入れれば良いでしょうか?

  • 【EXCEL】で残業時間を計算する方法

    1日の勤務時間が、8時間とされている場合の残業時間の算出方法をお知らせください。但し、勤務開始時刻及び終了時刻に決まりはありません。 【例】  8月1日 出勤時間 10:35 退勤時間 21:45 休憩時間  1:00(固定) 労働時間 11:10(出勤時間-退勤時間) 実働時間 10:00(労働時間-休憩時間) 残業時間  2:10(実働時間-8時間) 決定残業時間 2:00(30分単位の切捨ての為) とした場合の、「残業時間」及び「決定残業時間」の求め方(式)をお知らせ頂けます様、お願いいたします。ただ、決定残業時間は、「-2」の場合もあります。これは早退した場合に該当しますが、これがネックになっております。どうぞ宜しくお願いいたします。

  • 残業時間の計算?について(算数レベルの質問

    11:45に出勤したとします。 21:45に退勤をしたとします。 1時間の休憩があります。 10時間居ますが休憩があるので9時間働いた事になりますよね? 8時間以上が残業でしたっけ?? 11:45出勤の場合ノー残業となるのは 20:45退勤の場合ですか?

  • SQL Serverのテーブルにて時間の計算をしたい

    お世話になります。 勤怠管理のアプリを作っています。 テーブル:SQL Server フロントエンド:MS Access 時間の計算ができません。 [日付] [出勤時刻] [退勤時刻] [勤務時間] というフィールドを作成したのですが、 勤務時間の計算はどのように行えばよろしいでしょうか? それぞれのデータ型はどのようにすればよろしいでしょうか? 単純に考えると[退勤時刻]-[出勤時刻]ですが……。 テーブルもMS Accessの場合はこのような計算式で勤務時間を算出できたのですが、SQL Serverに移行する場合がわかりません。 みなさま、どうぞよろしくお願いします。 ※質問文に不足・不明点がある場合はご指摘いただければ  補足欄にて追記させていただきます

  • コードの切替で、残業時間と休日出勤時間の計算したい

    A1に定時出勤時間 A2定時退勤時間を設定し、A3に実際の出勤時間、A4に実際の 退勤時間を入力しA5に基礎時給を設定します。 A1からA3を引いてA6に早出時間を、A2からA4を差し引いてA7に残業時間を表示し その合計をA8に集計してその時間にA5基礎時給をかけて時間外の賃金をA9に算出する パターンを 1とします。 次に休日出勤の設定としてA3実際の出勤時間からA4退勤時間までを差し引いた時間に A5基礎時給をかけて25%増し(1.25倍)として、A11休日出勤賃金のセルに表示させる パターンを 2 とします。 このコードをセルB1上で上記の 1 or 2を選択をして処理を変えたいのですがどうすればい いですか? 条件式書式もしくはVLOOKUP等でもできますか?どなたか教えて下さい。なお 数値がゼロの場合は空欄表示で。 --------------------------------------------------------------------------------

  • 勤務時間について

    勤務時間はタイムカードがある会社では出勤時間から退勤時間まで1分単位で計算するのが原則ということですが、 そうすると30分単位で残業時間を管理している会社は違反なのでしょうか? 実は、タイムカードで出勤と退勤は管理しているのですが、実際は30分単位の日報で残業が管理されていました。手元にタイムカードがない場合はどうやって調べるのでしょうか?会社が保管しているであろう賃金台帳に書いてあるのでしょうか?