【发布时间】:2026-01-17 12:35:02
【问题描述】:
我有一个 SQL 表,我需要在其中获取带有日期的最后一行的数字,并计算之前的行数,即使它们都没有日期。
例如
02/01/2011
03/01/2011
09/01/2011
NULL
10/10/2011
NULL
此表应返回第 5 条记录的数字 5
NULL
NULL
NULL
09/01/2011
NULL
10/10/2011
NULL
这个表应该返回 6
提前谢谢你
J
----- 更新 ------ 更多信息
该表本身代表完成的工作单元(里程碑),并链接到代表工作单元的父表。在里程碑表中,它包含日期、父工作 ID 和里程碑 ID。
从第一个例子开始
ParentID MilestoneID Date
1234 123 02/01/2011
1234 124 03/01/2011
1234 125 09/01/2011
1234 126 NULL
1234 127 10/10/2011
1234 128 NULL
希望对你有帮助
----- 更新 2 -----
我得到的最接近的是这个
SELECT TOP 1
Num
FROM
(
SELECT
ROW_NUMBER()OVER(ORDER BY ParentID) AS Num,
Date
FROM
Milestone
WHERE
Milestone.ParentID = 1234
) AS MilestoneStones
在哪里 日期不为空 订购方式 数字 DESC
但是由于数据集很大并且附加了其他东西,它变得非常慢 希望我能得到更好的东西
谢谢
J
【问题讨论】:
-
最后一行真的需要在这个查询中吗?你能不能在处理查询结果的代码中得到计数,不管是什么。
-
什么决定了该字段可以为 NULL 的行的顺序?有 ID 列吗?
-
ROW_NUMBER()OVER(ORDER BY ParentID) AS Num 应该是 ROW_NUMBER()OVER(ORDER BY ParentID, MilestoneID) AS Num 或者只是 ROW_NUMBER()OVER(ORDER BY MilestoneID) AS Num跨度>
标签: sql-server tsql count