【发布时间】:2016-02-17 18:16:09
【问题描述】:
我已经能够使用 LAG 从前一行获取数据,但我正在努力使用它来解决更复杂的问题。
基本上,我表中的每一集都可能有 10 个独特的出席者。每个出勤率的值是 1、2 或 3。
我需要完成的是,当出勤值增加时,以下所有行必须具有相同的值。
例如
Episode Attendance Value New Value
12345 1 1 1
12345 2 1 1
12345 3 2 2
12345 4 1 2
12345 5 1 2
12345 6 2 2
12345 7 3 3
12345 8 1 3
12345 9 1 3
12345 10 1 3
34567 1 1 1
34567 2 2 2
34567 3 1 2
34567 4 2 2
34567 5 1 2
34567 6 3 3
34567 7 1 3
56789 1 2 2
56789 2 1 2
56789 3 1 2
所以新值可以从 1 增加到 2 或 3,从 2 增加到 3,但它永远不会减少。
对此的任何帮助将不胜感激。使用 LAG 可能不是正确的答案,但正如您所了解的那样,我有点新手。
这是我目前得到的 SQL:
SELECT *,
NewValue =
CASE WHEN EPISODEID = Lag(EpisodeID,1) OVER(ORDER BY EpisodeID Asc) AND
LAG(Value, 1) OVER(ORDER BY [EpisodeID] asc, Attendance) >= Value THEN LAG(Value,1)
OVER(ORDER BY [EpisodeID] asc, Attendance)
ELSE Value
END
FROM TABLE
它只适用于一行,我知道为什么,但我没有找到足够的指导来改进它。
令人沮丧的是,我可以在 Excel 中执行此操作,但我正在努力提高我的 SQL 技能
【问题讨论】:
-
刚刚意识到它没有在我的表格示例中留下表格格式 - 我如何让它正确显示?
-
我们系统中的出勤率被编码为 1、2 或 3 级,我被要求计算有多少 2 级和 3 级出勤率。简单的。但是,在一个情节中,如果出勤率较高,则所有后续出勤率都应计入该新级别。之前的保持不变。因此,按 1,1,1,2,1,1,3 顺序排列的出勤值将变为 1,1,1,2,2,2,3。
-
你应该向我们展示你迄今为止所尝试的。否则,您的问题看起来就像“为我做作业”,人们不太可能回答。
-
感谢 Toby - 用我的代码编辑
标签: sql-server-2012 lag