我正在尝试创建一个表格来查看按
employeeID
订购的所有疾病呼叫,还显示“疾病”期间的开始和结束时间。
SELECT
EmployeeID,
StartDateTime, EndDateTime,
hourtype,
LEAD(hourtype, 1, 'other') OVER (PARTITION BY EmployeeID ORDER BY StartDateTime) AS NextHourType
FROM
dflxs.stg_registeredhours
WHERE
employeeID = 29
预期结果:
员工ID | 开始日期 | 结束日期 | 生病电话 |
---|---|---|---|
29 | 2021-10-08 | 2021-10-8 | 1 |
29 | 2022-02-22 2022-02-22 | 2 |
您希望显示按 EmployeeID 排序的所有病假电话,并显示病假期的开始和结束时间。为此,可以使用时间窗口(窗口函数)和SQL分析函数。以下是用于此目的的 SQL 语言示例查询:
SELECT
EmployeeID,
MIN(StartDateTime) AS StartDate,
MAX(EndDateTime) AS EndDate,
COUNT(*) AS SicknessCall
FROM
dflxs.stg_registeredhours
WHERE
EmployeeID = 29
GROUP BY
EmployeeID, hourtype,
DATEDIFF(day, '1970-01-01', StartDateTime)
HAVING COUNT(*) >= 2
ORDER BY EmployeeID, StartDate;
此查询根据 EmployeeID、小时类型以及病假期间的开始日期 (StartDate) 和结束日期 (EndDate) 显示组中 29 号员工的所有病假电话。它还计算每个期间的病假电话总数,并按员工编号和开始日期对结果进行排序。