sql-server - Row_number() 分区依据 - 对于重复值

标签 sql-server

对新帖子感到抱歉。我不知 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];

An SQLfiddle to test with .

关于sql-server - Row_number() 分区依据 - 对于重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23947091/

相关文章:

sql-server - 数据库 'Name' 的事务日志已满。要了解日志中的空间无法重用的原因,请参阅 sys.databases 中的 log_reuse_wait_desc 列

php - PDO 存储过程返回值

php - 如何在没有静态 IP 的情况下远程访问本地 Web 或数据库服务器

sql-server - 我想在 SQL Server 2012 中优化查询

sql-server - 通过 freetds 从 SQL Server 到 Linux 上的 Rails 3 应用程序的错误字符编码

sql-server - 如何删除系统拥有的localdb实例

sql - 在SQL Server中如何从不在另一个表中的每个组中获取最大时间戳

c# - 为什么存储过程在代码中运行缓慢,但在 SSMS 中运行速度很快?

sql-server - 如何获取存储过程来调用同一 SQL 服务器上的外部数据库?

sql-server - 如何检索多个详细记录加上主记录作为单行?