正在尝试获取员工的首次登录和最后一次注销 我的数据看起来像
样本 fiddle http://sqlfiddle.com/#!9/f4deb0/1
在 emp_timings 中
userid type swipe_time
1, 'in_time', '2019-10-21 09:10:20'
1, 'out_time', '2019-10-21 11:20:50'
1, 'in_time', '2019-10-21 13:10:20'
1, 'out_time', '2019-10-21 20:20:50'
2, 'out_time', '2019-10-21 09:00:30'
2, 'in_time', '2019-10-21 10:10:10'
2, 'out_time', '2019-10-21 11:30:30'
2, 'in_time', '2019-10-21 13:10:10'
2, 'out_time', '2019-10-21 21:30:30'
emp table
userid name
1, 'Albert'
2, 'Edison'
正在寻找如下输出
userid name in_time out_time
1 Albert '2019-10-21 09:10:20' '2019-10-21 20:20:50'
2 Edison '2019-10-21 10:10:10' '2019-10-21 21:30:30'
为了首先实现这一点,我试图获得如下所示的第一个 in_time
select min(swipe_time) swipe_in, userid, type, swipe_time, date(swipe_time)
from emp_timings
where type = 'in_time' and date(`swipe_time`) = CURDATE()
group by userid, swipe_time
但以多次结束
最佳答案
我想你想要条件聚合:
select et.userid,
min(case when et.type = 'in_time' then et.swipe_time end) as swipe_in,
max(case when et.type = 'out_time' then et.swipe_time end) as swipe_out
from emp_timings et
where et.swipe_time >= curdate() and
et.swipe_time < curdate + interval 1 day
group by et.userid;
我留给你加入这个名字。
请注意,日期比较已更改。尽管您的方法完全有效,但如果有合适的索引可用,它会阻止查询在 swipe_time
上使用索引。修改后的代码是索引友好的。
关于Mysql:获取首次登录和最后一次注销时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58489837/