SQL 服务器中的 LEAD 和 LAG
LEAD and LAG in SQL Server
我正在尝试确定是否在保存工单后应用了模板。
该代码执行 运行,但它不会从 ACTION 列捕获字符串 "template applied"。
这是 table 我获取数据的地方:
这是我得到的结果:
我的代码:
SELECT *
FROM
(SELECT
[ACTION],
CASE
WHEN ACTION = 'Save' AND LAG(ACTION) OVER (ORDER BY SYS_CREATED_BY, SYS_CREATED_ON) LIKE 'Template Applied%' AND LAG(SYS_CREATED_BY) OVER (ORDER BY SYS_CREATED_BY, SYS_CREATED_ON) = SYS_CREATED_BY
THEN 1
ELSE 0
END AS RELEVANT_SAVE,
[TICKET_NUMBER],
[USER_ID],
[SYS_CREATED_BY], [SYS_CREATED_ON],
DATEPART(YEAR, [SYS_CREATED_ON]) AS YEAR,
DATEPART(MONTH, [SYS_CREATED_ON]) AS month
FROM
TICKETSDB
WHERE
(ACTION = 'Save' OR ACTION LIKE 'Template Applied%')) AS T
您似乎需要将 order by
的一部分移动到 partition by
在 lead
和 lag
语句中,将 over
子句更改为
OVER (PARTITION BY SYS_CREATED_BY ORDER BY SYS_CREATED_ON DESC)
这将确定您希望按人查看的位置。
如果你不在乎,也可以完全删除它
OVER ( ORDER BY SYS_CREATED_ON)
我正在尝试确定是否在保存工单后应用了模板。 该代码执行 运行,但它不会从 ACTION 列捕获字符串 "template applied"。
这是 table 我获取数据的地方:
这是我得到的结果:
我的代码:
SELECT *
FROM
(SELECT
[ACTION],
CASE
WHEN ACTION = 'Save' AND LAG(ACTION) OVER (ORDER BY SYS_CREATED_BY, SYS_CREATED_ON) LIKE 'Template Applied%' AND LAG(SYS_CREATED_BY) OVER (ORDER BY SYS_CREATED_BY, SYS_CREATED_ON) = SYS_CREATED_BY
THEN 1
ELSE 0
END AS RELEVANT_SAVE,
[TICKET_NUMBER],
[USER_ID],
[SYS_CREATED_BY], [SYS_CREATED_ON],
DATEPART(YEAR, [SYS_CREATED_ON]) AS YEAR,
DATEPART(MONTH, [SYS_CREATED_ON]) AS month
FROM
TICKETSDB
WHERE
(ACTION = 'Save' OR ACTION LIKE 'Template Applied%')) AS T
您似乎需要将 order by
的一部分移动到 partition by
在 lead
和 lag
语句中,将 over
子句更改为
OVER (PARTITION BY SYS_CREATED_BY ORDER BY SYS_CREATED_ON DESC)
这将确定您希望按人查看的位置。
如果你不在乎,也可以完全删除它
OVER ( ORDER BY SYS_CREATED_ON)