对新帖子感到抱歉。我不知 Prop 体如何搜索我的需求。
这是场景,
**Location Name Datetime**
ABC 2014-05-01 09:15
ABC 2014-05-01 09:25
XYZ 2014-05-01 09:35
PQR 2014-05-01 09:45
ABC 2014-05-01 09:55
这些是我拥有的数据,我需要如下结果,
**Location Name Datetime** Row Number
ABC 2014-05-01 09:15 1
ABC 2014-05-01 09:25 1
XYZ 2014-05-01 09:35 2
PQR 2014-05-01 09:45 3
ABC 2014-05-01 09:55 4
请帮我解决这个问题。
最佳答案
对于 SQL Server 2012 或更高版本,您可以使用 LAG() OVER()
将一行与前一行进行比较。这允许您仅计算与最后一行的差异(此处根据是否存在差异生成 0 或 1);
如果您随后使用 SUM() OVER()
将差异相加,您将得到您想要的结果;
WITH cte AS (
SELECT [Location Name], [Datetime],
CASE WHEN LAG([Location Name])
OVER (ORDER BY [Datetime]) <> [Location Name]
THEN 1 ELSE 0 END rn
FROM mytable
)
SELECT [Location Name], [Datetime],
1 + SUM(rn) OVER (ORDER BY [Datetime]) [Row Number]
FROM cte
ORDER BY [Datetime];
关于sql-server - Row_number() 分区依据 - 对于重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23947091/