比较 mysql 中同一列中的两个日期
compare two dates in same column in mysql
我们有生物识别数据,其中包含三列 Employee id、TimeIn 和 autoincrement id。
我们必须找出员工的工作时间,但员工一天可能进出两三次。
如何找出他进出的时间。没有我们说进进出出的专栏。我们还做了 max(TimeIn) 和 min(TimeIn) 的区别。但是在我们这里,不可能因为一个员工一天进进出出很多次。
13 2017-10-31 23:15:11 1 255 1 0
13 2017-10-31 23:15:27 1 255 1 0
3 2017-11-01 05:54:06 1 255 1 0
2 2017-11-01 05:54:31 1 255 1 0
11 2017-11-01 05:55:58 1 255 1 0
1 2017-11-01 05:56:24 1 255 1 0
14 2017-11-01 06:02:23 1 255 1 0
8 2017-11-01 07:54:24 1 255 1 0
8 2017-11-01 07:54:27 1 255 1 0
7 2017-11-01 08:06:37 1 255 1 0
13 2017-11-01 08:29:52 1 255 1 0
10 2017-11-01 09:54:41 1 255 1 0
15 2017-11-01 10:44:17 1 255 1 0
4 2017-11-01 11:00:28 1 255 1 0
14 2017-11-01 11:00:59 1 255 1 0
5 2017-11-01 11:24:50 1 255 1 0
9 2017-11-01 12:46:32 1 255 1 0
6 2017-11-01 12:58:24 1 255 1 0
11 2017-11-01 13:00:18 1 255 1 0
1 2017-11-01 13:00:28 1 255 1 0
2 2017-11-01 16:06:14 1 255 1 0
2 2017-11-01 16:06:24 1 255 1 0
SELECT SUM(HOUR(TimeIn)) FROM table_biometric group by DATE(TimeIn),Employee_id
使用查询,您将获得每位员工每天的总工作时数
如果你想用一个函数对全天的小时数求和,你可以之后
终于可以使用 datetime 函数寻求其他帮助了
https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html
好吧,我不知道您的 table 专栏。如果能得到 describe your_table_name
查询的结果就好了。
但您可以根据需要调整此查询:
SELECT
TIME_FORMAT(SEC_TO_TIME(sum(TIME_TO_SEC(t1.your_datetime_column_name))), "%h:%i") AS diff
from table t1
LEFT join table t2
on t1.primary_key_column_name != t2.primary_key_column_name
WHERE t1.primary_key_column_name IS NOT NULL
遵循没有进出你只能假设第一个输入为输入,下一个为输出。
你可以内连接到下一个值以获得时间差,而不是只过滤奇数(偶数会超时)
select a.row, a.empid, timestampdiff(second,a.timein, ifnull(b.timeout,date_add(date(a.timein) , interval 1 day))) timeinsec from
(SELECT @row_num := IF(@prev_value=o.empid,@row_num+1,1) AS Row,
empid ,timein,
@prev_value := o.empid
FROM Table1 o,
(SELECT @row_num := 1) x,
(SELECT @prev_value := '') y
ORDER BY o.empid,timein asc
) a
join
(SELECT @row_num := IF(@prev_value2=o.empid,@row_num+1,1) AS Row,
empid ,timein as timeout,
@prev_value2 := o.empid
FROM Table1 o,
(SELECT @row_num := 1) x,
(SELECT @prev_value2 := '') y
ORDER BY o.empid,timein asc) b
on a.empid=b.empid and a.row=b.row-1
where mod(a.row,2)=1
编辑
- datediff 更改为 timestampdiff
- 已处理空情况
我们有生物识别数据,其中包含三列 Employee id、TimeIn 和 autoincrement id。 我们必须找出员工的工作时间,但员工一天可能进出两三次。 如何找出他进出的时间。没有我们说进进出出的专栏。我们还做了 max(TimeIn) 和 min(TimeIn) 的区别。但是在我们这里,不可能因为一个员工一天进进出出很多次。
13 2017-10-31 23:15:11 1 255 1 0
13 2017-10-31 23:15:27 1 255 1 0
3 2017-11-01 05:54:06 1 255 1 0
2 2017-11-01 05:54:31 1 255 1 0
11 2017-11-01 05:55:58 1 255 1 0
1 2017-11-01 05:56:24 1 255 1 0
14 2017-11-01 06:02:23 1 255 1 0
8 2017-11-01 07:54:24 1 255 1 0
8 2017-11-01 07:54:27 1 255 1 0
7 2017-11-01 08:06:37 1 255 1 0
13 2017-11-01 08:29:52 1 255 1 0
10 2017-11-01 09:54:41 1 255 1 0
15 2017-11-01 10:44:17 1 255 1 0
4 2017-11-01 11:00:28 1 255 1 0
14 2017-11-01 11:00:59 1 255 1 0
5 2017-11-01 11:24:50 1 255 1 0
9 2017-11-01 12:46:32 1 255 1 0
6 2017-11-01 12:58:24 1 255 1 0
11 2017-11-01 13:00:18 1 255 1 0
1 2017-11-01 13:00:28 1 255 1 0
2 2017-11-01 16:06:14 1 255 1 0
2 2017-11-01 16:06:24 1 255 1 0
SELECT SUM(HOUR(TimeIn)) FROM table_biometric group by DATE(TimeIn),Employee_id
使用查询,您将获得每位员工每天的总工作时数
如果你想用一个函数对全天的小时数求和,你可以之后
终于可以使用 datetime 函数寻求其他帮助了
https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html
好吧,我不知道您的 table 专栏。如果能得到 describe your_table_name
查询的结果就好了。
但您可以根据需要调整此查询:
SELECT
TIME_FORMAT(SEC_TO_TIME(sum(TIME_TO_SEC(t1.your_datetime_column_name))), "%h:%i") AS diff
from table t1
LEFT join table t2
on t1.primary_key_column_name != t2.primary_key_column_name
WHERE t1.primary_key_column_name IS NOT NULL
遵循没有进出你只能假设第一个输入为输入,下一个为输出。
你可以内连接到下一个值以获得时间差,而不是只过滤奇数(偶数会超时)
select a.row, a.empid, timestampdiff(second,a.timein, ifnull(b.timeout,date_add(date(a.timein) , interval 1 day))) timeinsec from
(SELECT @row_num := IF(@prev_value=o.empid,@row_num+1,1) AS Row,
empid ,timein,
@prev_value := o.empid
FROM Table1 o,
(SELECT @row_num := 1) x,
(SELECT @prev_value := '') y
ORDER BY o.empid,timein asc
) a
join
(SELECT @row_num := IF(@prev_value2=o.empid,@row_num+1,1) AS Row,
empid ,timein as timeout,
@prev_value2 := o.empid
FROM Table1 o,
(SELECT @row_num := 1) x,
(SELECT @prev_value2 := '') y
ORDER BY o.empid,timein asc) b
on a.empid=b.empid and a.row=b.row-1
where mod(a.row,2)=1
编辑
- datediff 更改为 timestampdiff
- 已处理空情况