如何跟踪一列中的更改?

时间:2013-08-25 17:34:33

标签: sql sql-server

我有列日期,其中日期按升序排序,并且有许多重复日期。在第一列中,我有一个索引,当日期改变时,该索引应该增加1。

现在看起来像这样

表a

index      date  
---------------------
1       2001-03-01  
1       2001-03-01  
1       2001-03-01  
1       2001-04-01  
1       2001-04-01  
1       2001-04-01  
1       2001-05-01  

应该是这样的

表a

index   date  
-----------------
1      2001-03-01  
1      2001-03-01  
1      2001-03-01  
2      2001-04-01  
2      2001-04-01  
2      2001-04-01  
3      2001-05-01  

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

为了获得所需的结果,可以使用dense_rank()分析函数。这是一个例子:

select dense_rank() over(order by date1) as index1
     , date1
  from tab_a

结果:

INDEX1      DATE1
--------------------
1         2001-03-01
1         2001-03-01
1         2001-03-01
2         2001-04-01
2         2001-04-01
2         2001-04-01
3         2001-05-01

SQLFiddle Demo

作为旁注。尽量避免使用dateindex之类的保留字作为列名。

答案 1 :(得分:0)

您可以在案件中使用CHANGETABLE

  

返回表格的更改跟踪信息。您可以使用此信息   用于返回表的所有更改或更改跟踪的语句   特定行的信息。