【问题标题】:Figure out overtime hours based on a punch in, punch out, puch lunch根据打卡、打卡、吃午餐计算加班时间
【发布时间】:2014-01-22 02:32:53
【问题描述】:

这是我的一组数据:

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(id INT NOT NULL PRIMARY KEY
,user_id INT NOT NULL
 ,payroll_id INT NOT NULL
,type CHAR(3) NOT NULL
,time INT NOT NULL
,created INT NOT NULL 
,modified INT NULL 
 ,site_id INT NOT NULL
,is_lunch TINYINT NOT NULL DEFAULT 0
);

INSERT INTO my_table VALUES 
(242144 ,1289 ,0 ,'in'  ,1389020986 ,1389020986 ,1389020986 ,1000 ,0),
(242679 ,1289 ,0 ,'out' ,1389049440 ,1389135896 ,1389194110 ,1000 ,0),
(242777 ,1289 ,0 ,'in'  ,1389106200 ,1389194089 ,1389194137 ,1000 ,0),
(242778 ,1289 ,0 ,'out' ,1389136200 ,1389194092 ,1389194153 ,1000 ,0),
(242779 ,1289 ,0 ,'in'  ,1389194095 ,1389194095 ,1389194095 ,1000 ,0),
(242976 ,1289 ,0 ,'out' ,1389221878 ,1389221878 ,1389221878 ,1000 ,0),
(243062 ,1289 ,0 ,'in'  ,1389280527 ,1389280527 ,1389280527 ,1000 ,0),
(243070 ,1289 ,0 ,'out' ,1389280683 ,1389280683 ,1389280683 ,1000 ,0),
(243071 ,1289 ,0 ,'in'  ,1389280686 ,1389280686 ,1389280686 ,1000 ,0),
(243278 ,1289 ,0 ,'out' ,1389309710 ,1389309710 ,1389309710 ,1000 ,0),
(243361 ,1289 ,0 ,'in'  ,1389365719 ,1389365719 ,1389365719 ,1000 ,0),
(243573 ,1289 ,0 ,'out' ,1389395108 ,1389395108 ,1389395108 ,1000 ,0),
(243700 ,1289 ,0 ,'in'  ,1389626136 ,1389626136 ,1389626136 ,1000 ,0),
(243886 ,1289 ,0 ,'out' ,1389654144 ,1389654144 ,1389654144 ,1000 ,0),
(243998 ,1289 ,0 ,'in'  ,1389713199 ,1389713199 ,1389713199 ,1000 ,0),
(244177 ,1289 ,0 ,'out' ,1389741915 ,1389741915 ,1389741915 ,1000 ,0),
(244254 ,1289 ,0 ,'in'  ,1389797075 ,1389797075 ,1389797075 ,1000 ,0),
(244461 ,1289 ,0 ,'out' ,1389827243 ,1389827243 ,1389827243 ,1000 ,0),
(244545 ,1289 ,0 ,'in'  ,1389883652 ,1389883652 ,1389883652 ,1000 ,0),
(244762 ,1289 ,0 ,'out' ,1389914226 ,1389914226 ,1389914226 ,1000 ,0),
(244830 ,1289 ,0 ,'in'  ,1389968788 ,1389968788 ,1389968788 ,1000 ,0),
(245025 ,1289 ,0 ,'out' ,1389996312 ,1389996312 ,1389996312 ,1000 ,0),
(245214 ,1289 ,0 ,'in'  ,1390232302 ,1390232302 ,1390232302 ,1000 ,0);

我想算出每周工作的总小时数,然后从 40 中减去该数字以得到加班时间。按周细分,第 1 周正常工时、第 1 周加班工时、第 2 周正常工时、第 2 周加班工时。全部通过MYSQL。这个数据集甚至有可能吗?

时间是出拳的时间。所以如果你的'type''in' 你的时钟已经开始了。下一个'out' 表示您已出局,因此您会发现'in''out' 之间发生了多少'time'

【问题讨论】:

  • 写一个查询,如果它不起作用,提交它以便我们为您提供帮助。
  • 一切皆有可能。
  • 我最感兴趣的部分是如何将它们分组。如何知道什么属于什么。进进出出,说进出出是在一起的,现在找出他们之间的时间。
  • 最简单的方法是添加第二个表格,其中包含每天在工作日花费的时间。您可以随时维护该表或对其进行批处理。如果您无法添加另一个表格,那么您可以将所有出局的总和减去特定日期的所有入局。
  • 我也是这么想的。将工作时间和工作时间分组的更好方法。这组数据太宽泛,无法正确分组和计算。

标签: php mysql


【解决方案1】:

您可以对所有数据求和,然后对所有数据进行减去,然后按天对它们进行分组。这是假设对于每个进场,在同一天都有一个出场。

要按天对它们进行分组,您需要使用 DATE 函数从时间戳中提取年-月-日。

类似:

SELECT
    SUM(IF(type = 'in', -1 * time, time)),
    DATE_FORMAT(time, 'some format') AS day
FROM punch
GROUP BY day

格式见:http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-format

【讨论】:

  • 这行得通,但我唯一遇到的问题是如果有人上夜班。他们在 2014 年 1 月 20 日晚上 11 点打卡,然后在 2014 年 1 月 21 日凌晨 2 点打卡。这需要计算,但它们不能分组,因为它们在不同的日子。我认为我将不得不减少损失并采用更好的方式来分组打卡时间。
  • 您必须定义“一天”对您意味着什么。 NOBODY 是否有任何时间在工作?您可以定义从早上 6 点开始到早上 5:59 结束的一天。这样一来,即使有人从晚上 10 点工作到凌晨 5 点,轮班也不会跨越 2 天,只是一天。
  • 您可以按开始日期或按结束日期分组,但这对于在一周内开始并在另一周结束的通宵班可能会很麻烦。如何计算这些时间并不是真正的数据库问题。这是一个会计或业务管理或合同管理问题。
  • 人们工作的时间是可变的。有时我们在一周中的任何一天(包括周末)都有夜班。我们唯一的具体开始和停止时间是发薪周的第一天和发薪周的最后一天。
  • 如果有人上夜班,你算在哪一天?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-27
  • 2014-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
相关资源
最近更新 更多