【问题标题】:Time Attendances SQL Query [duplicate]考勤SQL查询[重复]
【发布时间】:2020-04-02 12:27:23
【问题描述】:

我目前正在努力编写 SQL 查询。

这是我的表格的样子以及我想从哪里检索数据:

我想写一个查询结果如下:

正如您在第一个表中看到的,员工每天可以签入和签出 2 次以上。当员工第一次签到时,日期/时间应放在第一列“签到”中。当他第二次签到时,日期/时间应放在第二列“签出”中。当他第三次签到时,日期/时间应放在“签到”列中,依此类推。

【问题讨论】:

  • 为什么不为第一个员工提供第二次“结账”?同时标记您正在使用的数据库。

标签: sql time-and-attendance


【解决方案1】:

你的数据库支持窗口函数,你可以做条件聚合:

select
    employee_id,
    min(time_in_out) check_in,
    max(time_in_out) check_out
from (
    select t.*, row_number() over(partition by employee_id order by time_in_out) - 1 rn
    from mytable t
) t
group by employee_id, floor(rn / 2) 
order by employee_id, floor(rn / 2)

【讨论】:

  • 非常感谢您的帮助。
  • 欢迎@TanNguyen。如果我的回答正确回答了您的问题,请点击复选标志accept it。您也可以使用上箭头对其进行投票。
  • 您好 GMB,我刚刚测试过,但没有给出预期的结果。
  • @TanNguyen:你能用你的样本数据设置一个db<>fiddle吗?
  • 嗨@GMB,我在最近的问题中添加了结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-01
  • 1970-01-01
  • 2017-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多