本文介紹了在SQL Server中領先和落后的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我正在嘗試確定保存票證后是否應用了模板。
代碼確實運行,但它不從操作列捕獲字符串”模板已應用”。
這是我獲取數據的表格:
以下是我得到的結果:
我的代碼:
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)
這篇關于在SQL Server中領先和落后的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,