SQL Server:如何查询Document表中Count值最后一次变更的最新行?
解决SQL Server中仅返回Count值变更的最新行问题
没问题,针对你这个需求,我给你写个SQL Server的查询语句,刚好能搞定——只返回Count值发生变更的最新行。
先明确你的表结构和现有数据:
| ID | DOC_ID | Count |
|---|---|---|
| 1 | 22 | 1 |
| 2 | 22 | 1 |
| 3 | 22 | 2 |
| 4 | 22 | 2 |
| 5 | 22 | 2 |
| 6 | 22 | 3 |
你的期望输出是最后一次Count变更的最新行:
| ID | DOC_ID | Count |
|---|---|---|
| 6 | 22 | 3 |
实现SQL语句
WITH ChangedRows AS ( SELECT ID, DOC_ID, Count, -- 获取当前行的上一行Count值,按DOC_ID分组、ID排序 LAG(Count) OVER (PARTITION BY DOC_ID ORDER BY ID) AS PreviousCount FROM Document ) SELECT ID, DOC_ID, Count FROM ChangedRows -- 筛选出Count发生变更的行(包括第一行,因为它没有上一行) WHERE (PreviousCount IS NULL OR PreviousCount != Count) -- 按ID倒序,取最新的那一行 ORDER BY ID DESC OFFSET 0 ROWS FETCH NEXT 1 ROW ONLY;
代码逻辑说明
- 用
LAG()窗口函数,按DOC_ID分组、ID排序,获取每一行的上一行Count值,命名为PreviousCount。 - 筛选出
PreviousCount为空(也就是分组内的第一行)或者PreviousCount和当前行Count不相等的行,这些就是Count发生变更的行。 - 把这些变更行按
ID倒序排列,用OFFSET 0 ROWS FETCH NEXT 1 ROW ONLY取第一行,就是你要的最新变更行。
内容的提问来源于stack exchange,提问作者Jeswanth
相关产品推荐
相关产品推荐

