【问题标题】:SQL Server : using CTE row partition to serialize sequential timestampsSQL Server:使用 CTE 行分区序列化顺序时间戳
【发布时间】:2021-07-19 04:03:06
【问题描述】:

我想我只需要一点帮助,但有没有办法使用某种类型的 CTE 行分区来增量计算 SQL 中的步骤?我使用的是 SQL Server 2008,所以无法使用 LAG 函数。

在下面,我试图找到一种方法来计算步骤编号,如下图所示,对于我表中的每个唯一项目,在本例中为 G43251,它根据日期(时间戳)计算进程 Step_Number和进程类型。对于具有相同时间戳和process_type 的那些,它会将它们标记为相同的 Step_Number,因为其他字段可能会导致时间戳重复两次。

现在我在下面玩这个,看看我怎么可能适合DISTINCT 时间戳方法?这样它就不会将每一行都算作新的东西。

WITH cte AS
(
    SELECT 
        *, 
        ROW_NUMBER() OVER (ORDER BY Timestamp_Posted DESC) 
            - ROW_NUMBER() OVER (PARTITION BY Item ORDER BY Timestamp_Posted Desc) rn 
    FROM 
        #t1
)
SELECT 
    *, 
    ROW_NUMBER() OVER (PARTITION BY Item, rn ORDER BY Timestamp_Posted DESC) rn2
FROM 
    cte
ORDER BY 
    Timestamp_Posted DESC

【问题讨论】:

    标签: sql sql-server-2008 partitioning dense-rank


    【解决方案1】:

    请使用dense_rank() 而不是row_number()

    SELECT *, dense_rank() OVER(Partition By Item ORDER BY Timestamp_Posted, Process_Type ) Step_Number
    FROM  #t1
    ORDER BY Timestamp_Posted DESC
    

    【讨论】:

      猜你喜欢
      • 2012-04-23
      • 2012-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-21
      • 1970-01-01
      • 1970-01-01
      • 2013-09-10
      相关资源
      最近更新 更多