我有一张表,可以将所有“签到”记录到系统中。我想计算当天用户的所有“签到”,但问题是有时用户在一分钟内错误地两到三次办理登机手续。所以我只想计算所有条目至少有两分钟的差距
我当前的命令如下:
"SELECT event_datetime, LEFT(tag_uid,8) AS tag_uid, count(*) as anzahl FROM events WHERE date(event_datetime) = curdate() GROUP BY tag_uid"
所以我只想算一下,如果event_datetime之间的差距至少是由tag_uid(用户)分组的两分钟
任何想法如何解决?
答案 0 :(得分:0)
首先,您需要计算每个tag_uid的间隙,然后您可以根据需要设置条件。要计算差距,您需要有一个嵌套的选择命令,这将获得"首先checkIn"和#34;最后一次检查"使用min和max命令。使用" timediff"计算时间差。
注意:我没有尝试过代码,我也添加了select命令,因此您可以看到值以查找错误。
代码看起来与此类似:
SELECT
tbl_outer_events.event_datetime,
LEFT(tbl_outer_events.tag_uid,8) AS tag_uid,
count(tbl_outer_events.tag_uid) as anzahl,
(select min(event_datetime) from tbl_events as T1 where ( (t1.tag_uid = tbl_outer_events.tag_uid)) and (date(t1.event_datetime) = curdate()) )as `first_checkin`,
(select max(event_datetime) from tbl_events as T1 where ( (t1.tag_uid = tbl_outer_events.tag_uid)) and (date(t1.event_datetime) = curdate()))as `last_checkin`,
(select TIMEDIFF(max(event_datetime), min(event_datetime)) from tbl_events as T1 where ( (t1.tag_uid = tbl_outer_events.tag_uid)) and (date(t1.event_datetime) = curdate())) as `interval`
FROM events as tbl_outer_events
WHERE ((date(event_datetime) = curdate())
AND (select TIMEDIFF(max(event_datetime), min(event_datetime)) from tbl_events as T1 where ( (t1.tag_uid = tbl_outer_events.tag_uid)) and (date(t1.event_datetime) = curdate())) >= '00:20:00')
GROUP BY tag_uid;
PS:请向我们提供样本数据或预期结果。它将帮助我们和您理解这个问题。