我正在尝试计算夜班工作的总工作时间,其中“进班时间”为昨天晚上打孔,“超时工作”为第二天早晨打孔
我尝试了两个单独的简单查询,我需要在同一查询中获得Time In&Time Out。如果有人可以帮助我,我很高兴。以下是我尝试结合使用的两个select语句
SELECT
EMP_Punch_Date'DATE',
MAX(EMP_Punch_Time)'TIME IN'
FROM EMP_Event_Log
WHERE EMP_Punch_Date='09-02-2018'
GROUP BY EMP_Token_No,EMP_Name,EMP_Punch_Date,EMP_Punch_Time
SELECT
EMP_Punch_Date'DATE',
MIN(EMP_Punch_Time)'TIME OUT'
FROM EMP_Event_Log
WHERE EMP_Punch_Date='09-03-2018'
GROUP BY EMP_Token_No,EMP_Name,EMP_Punch_Date,EMP_Punch_Time
答案 0 :(得分:2)
如果EMP_Punch_Date
是date
或datetime
类型。
您可以尝试使用BETWEEN
组合两个查询,因为查询之间只有一个区别是MAX
列上的获取MIN
或EMP_Punch_Time
。
并删除EMP_Punch_Time
中的group by
SELECT
EMP_Punch_Date 'DATE',
MAX(CASE WHEN EMP_Punch_Date = '09-02-2018' THEN EMP_Punch_Time END) 'TIME IN' ,
MIN(CASE WHEN EMP_Punch_Date = '09-03-2018' THEN EMP_Punch_Time END) 'TIME OUT'
FROM EMP_Event_Log
WHERE EMP_Punch_Date BETWEEN '09-02-2018' AND '09-03-2018'
GROUP BY EMP_Token_No,EMP_Name,EMP_Punch_Date
答案 1 :(得分:1)
您可以通过使用子查询在2query之间使用联接
select max(t1.TIMEIN),min(t2.TIMEOUT),t1.DATE,t1.EMP_Token_No from
(
SELECT
EMP_Punch_Date as 'DATE',
MAX(EMP_Punch_Time) as 'TIMEIN'
FROM EMP_Event_Log
WHERE EMP_Punch_Date='09-02-2018'
GROUP BY EMP_Token_No,EMP_Name,EMP_Punch_Date,EMP_Punch_Time
) as t1
join
(
SELECT
EMP_Punch_Date as 'DATE',
MIN(EMP_Punch_Time) as 'TIMEOUT'
FROM EMP_Event_Log
WHERE EMP_Punch_Date='09-03-2018'
GROUP BY EMP_Token_No,EMP_Name,EMP_Punch_Date,EMP_Punch_Time
) t2 on t1.EMP_Token_No=t2.EMP_Token_No
group by t1.DATE,t1.EMP_Token_No