【发布时间】:2019-11-20 09:32:44
【问题描述】:
我有以下查询来获取具有 EmployeeId = 的员工的位置历史记录:
SELECT
e.EmployeeId,
el.EmployeeLocationId,
oe.OfficeExtensionId,
oe.Label,
[of].OfficeId as 'OfficeId',
[of].Name as 'Office Name',
el.LocationDate AS LocationStartDate,
LEAD(el.LocationDate) OVER (
ORDER BY
el.LocationDate) AS LocationEndDate
FROM
Employee_Location el
LEFT JOIN
Employee e
ON el.EmployeeId = e.EmployeeId
LEFT JOIN
OfficeExtension oe
ON el.OfficeExtensionId = oe.OfficeExtensionId
INNER JOIN
Office [of]
ON oe.OfficeId = [of].OfficeId
WHERE
el.EmployeeId = 5625
这是我的输出:
EmployeeId EmployeeLocationId OfficeExtensionId OfficeExtensionId Label LocationDateStart LocationDateEnd
5625 6265 156 156 Romania NULL 2019-04-09 08:15:37.9583552
5625 6265 156 156 Romania 2019-04-09 08:15:37.9583552 2019-07-02 11:00:24.4420116
5625 6390 83 83 Spain 2019-07-02 11:00:24.4420116 NULL
我想在没有 LocationDateStart 的地方将 NULL 值设置为 LocationDateEnd,所以我的预期输出应该如下所示:
EmployeeId EmployeeLocationId OfficeExtensionId OfficeExtensionId Label LocationDateStart LocationDateEnd
5625 6265 156 156 Italy NULL NULL
5625 6265 156 156 Romania 2019-04-09 08:15:37.9583552 2019-07-02 11:00:24.4420116
5625 6390 83 83 Spain 2019-07-02 11:00:24.4420116 NULL
【问题讨论】:
-
一个简单的
CASE WHEN LocationDate IS NOT NULL THEN LEAD()... END就可以了。
标签: sql-server tsql window-functions