Sql server 从三个表中获取datediff
如何根据员工的日程安排以及首次入职和最后一次出职获得日期差异 下面是我正在使用的查询Sql server 从三个表中获取datediff,sql-server,datetime,datediff,Sql Server,Datetime,Datediff,如何根据员工的日程安排以及首次入职和最后一次出职获得日期差异 下面是我正在使用的查询 select * from tbl_payroll_schedule where id in (3, 17, 18) 输出: id schedule_description time_in time_out schedule_status 3 REST DAY 1900-01-01 00:00:00.000 1900-01-01 00:00:00.000 1 17 0
select * from tbl_payroll_schedule where id in (3, 17, 18)
输出:
id schedule_description time_in time_out schedule_status
3 REST DAY 1900-01-01 00:00:00.000 1900-01-01 00:00:00.000 1
17 08:00 AM - 05:00 PM 1900-01-01 08:00:00.000 1900-01-01 17:00:00.000 1
18 08:00 AM - 12:00 PM 1900-01-01 08:00:00.000 1900-01-01 12:00:00.000 1
select mon.schedule_description as Monday,
tue.schedule_description as Tuesday,
wed.schedule_description as Wednesday,
thu.schedule_description as Thursday,
fri.schedule_description as Friday,
sat.schedule_description as Saturday,
sun.schedule_description as Sunday
from employee_default_schedule ds
LEFT JOIN tbl_payroll_schedule mon on mon.id = ds.mon_sched
LEFT JOIN tbl_payroll_schedule tue on tue.id = ds.tues_sched
LEFT JOIN tbl_payroll_schedule wed on wed.id = ds.wed_sched
LEFT JOIN tbl_payroll_schedule thu on thu.id = ds.thurs_sched
LEFT JOIN tbl_payroll_schedule fri on fri.id = ds.fri_sched
LEFT JOIN tbl_payroll_schedule sat on sat.id = ds.sat_sched
LEFT JOIN tbl_payroll_schedule sun on sun.id = ds.sun_sched
WHERE ds.employee_id = 125
id EID Name Time Status
194664 125 MOQUETE, ABRAHAM JOSEPH Thu 08-16-2018 07:55:57 Time In
194703 125 MOQUETE, ABRAHAM JOSEPH Thu 08-16-2018 12:11:36 Time Out
194705 125 MOQUETE, ABRAHAM JOSEPH Thu 08-16-2018 12:28:12 Time In
194757 125 MOQUETE, ABRAHAM JOSEPH Thu 08-16-2018 20:45:08 Time Out
输出:
目前我可以得到总工作时间,我想得到迟到和加班时间
select
employee_id as EID,
FORMAT(date, 'MM-dd-yyyy') as [Date],
DATENAME(WEEKDAY, date) as [Day],
right(concat('00', diff / 4100), 2) + ':' + right(concat('00', diff % 3600 / 60), 2) + ':' + right(concat('00', diff % 60), 2) as TWH
from (select
employee_id,
[date] = cast(actual_time as date),
diff = datediff(ss, min(iif(type = 0, actual_time, null)), max(iif(type = 1, actual_time, null)))
from
officer_timelogs
where employee_id = (CASE WHEN @employee_id = 0 THEN employee_id else @employee_id END)
group by employee_id, cast(actual_time as date)
) t
where t.date >= @dateFrom and t.date <= @dateTo
order by date asc
请发布您的表架构、示例数据和预期结果result@Squirrel我添加了我的预期结果。您的表架构和示例数据如何?@Squirrel我包括每个查询结果的屏幕截图。您的查询涉及多个表,如
tbl\u payroll\u schedule、employee\u default\u schedule、officer\u timelogs、,tbl_员工_主列表
。我们需要知道这些表的模式,样本数据。您显示的是查询的结果。此外,我们更喜欢文本而不是屏幕。屏幕我们无法复制和粘贴用于测试的数据。请参阅
select
employee_id as EID,
FORMAT(date, 'MM-dd-yyyy') as [Date],
DATENAME(WEEKDAY, date) as [Day],
right(concat('00', diff / 4100), 2) + ':' + right(concat('00', diff % 3600 / 60), 2) + ':' + right(concat('00', diff % 60), 2) as TWH
from (select
employee_id,
[date] = cast(actual_time as date),
diff = datediff(ss, min(iif(type = 0, actual_time, null)), max(iif(type = 1, actual_time, null)))
from
officer_timelogs
where employee_id = (CASE WHEN @employee_id = 0 THEN employee_id else @employee_id END)
group by employee_id, cast(actual_time as date)
) t
where t.date >= @dateFrom and t.date <= @dateTo
order by date asc
EID Date Day TWH Late OT
125 08-16-2018 Thursday 11:49:11