Sql 根据上次更新的日期为表生成行索引
我想在可能包含重复项的表中生成一个索引行。索引需要基于表中的值和上次更新日期 数据如下所示:Sql 根据上次更新的日期为表生成行索引,sql,sql-server,Sql,Sql Server,我想在可能包含重复项的表中生成一个索引行。索引需要基于表中的值和上次更新日期 数据如下所示: ID Val1 LastUpdateDate -- ------ ------------- 1 0 07.09.2019 1 2.5 12.09.2019 1 2.5 27.09.2019 1 3.5 01.10.2019 1 2.5 24.10.2019 1 0 01.11.2019 我希望
ID Val1 LastUpdateDate
-- ------ -------------
1 0 07.09.2019
1 2.5 12.09.2019
1 2.5 27.09.2019
1 3.5 01.10.2019
1 2.5 24.10.2019
1 0 01.11.2019
我希望:
ID Val1 LastUpdateDate index
-- ------ ------------- ----
1 0 07.09.2019 1
1 2.5 12.09.2019 2
1 2.5 27.09.2019 2
1 3.5 01.10.2019 3
1 2.5 24.10.2019 4
1 0 01.11.2019 5
我尝试了以下代码,但不起作用:
SELECT ID
,Value1
,Value2
,Value3
,LastUpdateDate
,(ROW_NUMBER() OVER (PARTITION BY ID ORDER BY last_update_date) - ROW_NUMBER()OVER(PARTITION BY ID,Value1,Value2,Value3 ORDER BY ID,Value1,Value2,Value3)) AS index
FROM Table1
ORDER BY LastUpdateDate
您可以将其解释为缺口和孤岛问题。但是,我认为最简单的方法是使用
LAG()
并计算更改:
您似乎想要稠密的\u rank()
:
请注意,index
对于列来说是一个非常糟糕的名称,因为它是SQL关键字
SELECT t1.*,
SUM(CASE WHEN prev_val1 = val1 THEN 0 ELSE 1 END) OVER (PARTITION BY id ORDER BY last_update_date) as seqnum
FROM (SELECT t1.*,
LAG(val1) OVER (PARTITION BY ID ORDER BY last_update_date) as prev_val1
FROM Table1 t1
) t1
ORDER BY LastUpdateDate;