Mysql:获取首次登录和最后一次注销时间

标签 mysql sql

正在尝试获取员工的首次登录和最后一次注销 我的数据看起来像

样本 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/

相关文章:

jquery - 列出按字母顺序分组的记录集

php - 分页仅显示产品的第一页;在第 1 页之后,出现 "Warning: mysqli_query(): Empty query"错误

mysql - SQL 选择您可能认识的人

sql - 记录不同种类的 INSERT 语句

sql - 动态转换数组元素的类型以匹配 PostgreSQL 查询中的某些表达式类型

sql - 如果名称类似,则删除索引

java - 无法更新 oracle 中的 clob 字段

sql - 我可以将这 2 个简单查询合并为一个查询吗?

java - 我的 servlet 之前工作正常,但现在无法连接到 mysql 服务器并给我一个错误

sql - Entity Framework v6.1 高效加载深层相关实体,然后对其进行查询