SQL 服务器:使用 CTE 行分区序列化顺序时间戳
SQL Server : using CTE row partition to serialize sequential timestamps
我想我只需要一点帮助,但是有没有一种方法可以使用某种类型的 CTE 行分区来增量计算 SQL 中的步骤?我正在使用 SQL Server 2008,因此无法使用 LAG
功能。
在下面,我试图找到一种方法来计算步数,如下图所示,对于我 table 中的每个唯一项目,在本例中为 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
请使用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
我想我只需要一点帮助,但是有没有一种方法可以使用某种类型的 CTE 行分区来增量计算 SQL 中的步骤?我正在使用 SQL Server 2008,因此无法使用 LAG
功能。
在下面,我试图找到一种方法来计算步数,如下图所示,对于我 table 中的每个唯一项目,在本例中为 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
请使用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