Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 根据上次更新的日期为表生成行索引_Sql_Sql Server - Fatal编程技术网

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;