为了账号安全,请及时绑定邮箱和手机立即绑定

如何通过用户ID获取多个条目之间的时差?

如何通过用户ID获取多个条目之间的时差?

PHP
人到中年有点甜 2021-04-30 13:15:15
我想创建一个出勤表,我可以从打卡机中获得价值,如下所示:UID  |  Time023  |  2019-01-29 20:06:53023  |  2019-01-29 20:07:10023  |  2019-01-29 20:22:05123  |  2019-01-30 08:57:01027  |  2019-01-30 09:14:14023  |  2019-01-30 11:22:21123  |  2019-01-30 18:35:53027  |  2019-01-30 19:00:25现在,所有数据都放在一个表中,因此我想要用户和按日期分组的第一个和最后一个输入,然后从2个值中获取时差我需要这样的输出:UID  |  In Time               |  Out Time              |  Time Diff.023  |  2019-01-29 20:06:53   |  2019-01-29 20:22:05   |  00:18:00027  |  2019-01-30 09:14:14   |  2019-01-30 19:00:25   |  10:00:00123  |  2019-01-30 08:57:01   |  2019-01-30 18:35:53   |  10:00:00首先,我尝试获取像这样的数据,但这对我不起作用$select =  mysqli_query ($db, "SELECT *, Min(Date) AS MinDate, Max(Date) AS MaxDate FROM demotable GROUP BY UID");
查看完整描述

2 回答

?
繁花如伊

TA贡献2012条经验 获得超12个赞

您可以使用TIMEDIFF()

SELECT 

  UID, 

  Min(timecolumn) AS `In Time`, 

  Max(timecolumn)  AS `Out Time`,

  TIMEDIFF(Max(timecolumn), Min(timecolumn)) AS `Time Diff`

FROM demotable 

GROUP BY UID, DATE(timecolumn)


查看完整回答
反对 回复 2021-05-07
?
慕斯709654

TA贡献1840条经验 获得超5个赞

对于同一天的时差,可以使用group by子句。根据您的输出-当天没有超时,然后不显示该行-为此,您可以通过检查同一天的max(time)不等于min(time)来使用HAVING子句。


SELECT 

  UID, 

  Min(Time) AS `In Time`, 

  Max(Time)  AS `Out Time`,

  TIMEDIFF(Max(Time), Min(Time)) AS `Time Diff`

FROM demo                          

GROUP BY UID, DATE(Time)  

HAVING Max(Time) != Min(Time) 

您也可以在dbfiddle上看到正在运行的演示


查看完整回答
反对 回复 2021-05-07
  • 2 回答
  • 0 关注
  • 189 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信