对不起这篇新帖子。我不知道具体如何搜索我的要求。
这是方案,
**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
请帮助我。
答案 0 :(得分: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];