这是我的数据集:
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'
表示您已经打了一拳,因此您可以找到'time'
和'in'
之间发生了多少'out'
。
答案 0 :(得分:1)
你可以全部输出,然后全部输入SUBSTRACT,然后按天分组。这假设对于每个in,在同一天有一个out。
要按天分组,您需要使用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