sql - 获取sql server中列的最后一个值
问题描述
我想获取列的最后一个值(它不是标识列)并将其递增到生成的相应行号的值。
Select isnull(LAST_VALUE(ColumnA) over(order by ColumnA), 0) +
ROW_NUMBER() OVER (ORDER BY ColumnA)
from myTable
我递归地调用我的 sp,因此我想到了这个逻辑。但它不起作用。
我基本上想要,第一次 1-9 第二次运行(如果递归地被调用 2 次)10-19 等等。
解决方案
在黑暗中完全刺伤,但我怀疑“不工作”意味着“返回当前行的值”。不要忘记,当未明确指定子句并且存在子句时,OVER
子句默认为窗口(请参阅SELECT - OVER Clause (Transact-SQL) - ORDER BY)。RANGE BETWEEN PRECEDING AND CURRENT ROW
ORDER BY
订购方式
ORDER BY *order_by_expression* [COLLATE *collation_name*] [ASC|DESC]
定义结果集的每个分区内行的逻辑顺序。也就是说,它指定了执行窗口函数计算的逻辑顺序。
- 如果未指定,则默认顺序为
ASC
,窗口函数将使用分区中的所有行。- 如果已指定,但未指定
ROWS
/RANGE
,则默认值将由可以接受可选/规范(例如 min 或 max)RANGE UNBOUNDED PRECEDING AND CURRENT ROW
的函数用作窗口框架的默认值。ROWS
RANGE
由于您尚未定义窗口,这就是您的LAST_VALUE
函数正在使用的。定义您想要分区的全部内容:
SELECT ISNULL(LAST_VALUE(ColumnA) OVER (ORDER BY ColumnA ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING), 0) +
ROW_NUMBER() OVER (ORDER BY ColumnA)
FROM dbo.myTable;
虽然戈登在他们的评论中说的是真正的解决方案:
您应该使用
identity
列或sequence
.
这种类型的解决方案可能(并且将会)最终遭受竞争条件,并最终在不应该的情况下重用“身份”。
推荐阅读
- java - 无法在文本视图中显示所需的结果,Android Studio
- r - 如何汇总 R 中某个位置内存在/不存在数据的多个观察结果?
- python - 从存储为熊猫数据框中的字符串的列表中提取项目
- web - 我如何证明某个 http 资源在特定时间存在于服务器中?(存在证明/POE)
- docker - docker-compose 中的伪 tty 分配
- android - FirebaseAnalytics 缺少几个参数常量
- python - 带有 y 变量名称的图例,不仅是处理
- javascript - 有人可以为我解释一下这段 javascript 代码吗?谢谢
- python - Python if 语句-hackerrank
- linux - 执行脚本后获取的退出状态不正确