【问题标题】:Set previous value as NULL for LEAD function将前一个值设置为 NULL 用于 LEAD 功能
【发布时间】: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


【解决方案1】:

只需将LEAD() 函数包装在CASE 表达式中:

el.LocationDate AS LocationStartDate,
CASE WHEN el.LocationDate IS NOT NULL THEN LEAD(el.LocationDate)
                                           OVER (ORDER BY el.LocationDate)
END AS LocationEndDate,

【讨论】:

    猜你喜欢
    • 2016-09-05
    • 2020-10-08
    • 1970-01-01
    • 2021-12-03
    • 2019-01-17
    • 1970-01-01
    • 2018-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多