【发布时间】:2021-04-20 13:02:22
【问题描述】:
我有一个按 ID 排序的表格,其中列有 Value。
| ID | Value |
| -------- | -------------- |
| 1 | 50 |
| 2 | 50 |
| 3 | 62 |
| 4 | 62 |
| 5 | 62 |
| 6 | 79 |
| 7 | 90 |
| 8 | 90 |
我想创建另一列 Prev_Value 列 Value 的每一行采用与当前行值不同的前一个/前一个数字,如表中所示下面。
输出表:
| ID | Value |Prev_Value |
| -------- | -------------- |---------------|
| 1 | 50 |NULL |
| 2 | 50 |NULL |
| 3 | 62 |50 |
| 4 | 62 |50 |
| 5 | 62 |50 |
| 6 | 79 |62 |
| 7 | 90 |79 |
| 8 | 90 |79 |
我应该使用修改后的 LAG() 函数、CROSS APPLY 还是嵌套 CASE,哪种方法最省时?任何帮助将不胜感激。
不幸的是,这里有一些参考资料不能解决我的问题: LAG(offset) until value is reached in BigQuery 和 SQL Server : select distinct until the value is changed
【问题讨论】:
-
值是否一直在增加?
-
不,它们也可能会减少。我应该在问题中提到它。
-
。 .使用累积最大值会稍微容易一些。
标签: sql sql-server tsql