我有一个带有employee_id,日期和打卡时间的考勤表。
Emp_Id PunchTime
101 10/10/2016 07:15
101 10/10/2016 12:20
101 10/10/2016 12:50
101 10/10/2016 16:31
102 10/10/2016 07:15
这里我只有工作日的日期。我想获得一系列给定日期的员工出勤名单。我也需要这一天。结果应如下所示
date | day |employee_id | Intime | outtime |
2016-10-09 | sunday | 101 | | |
2016-10-10 | monday | 101 | 2016-10-10 7:15AM |2016-10-10 4:31 PM |
答案 0 :(得分:0)
您可以生成日期列表,然后对它们进行外部联接:
以下显示十月的所有日期:
select d.date, a.emp_id,
min(punchtime) as intime,
max(punchtime) as outtime
from generate_series(date '2016-10-01', date '2016-11-01' - 1, interval '1' day) as d (date)
left join attendance a on d.date = a.punchtime::date
group by d.date, a.emp_id;
order by d.date, a.emp_id;
如果您想要每天的第一个和最后一个时间戳,可以使用简单的group by
查询来完成。
然而,这将不会重复不存在日期的emp_id。
答案 1 :(得分:0)
以下内容将生成一系列日期列表(以您的打卡时间表中的任何范围开始和结束),员工和银行时间,每个时间的停机时间。在这里检查SQL小提琴:
http://sqlfiddle.com/#!15/d93bd/1
pip install