当相似的组在某些行之后重复时,为每个组添加唯一的行

时间:2019-04-16 07:02:41

标签: tsql

嗨,有人可以帮我获得唯一的群组号码吗?

即使同一组在某些组之后重复,我也需要为每个组提供唯一的行。 我有以下数据:

id  version product startdate   enddate
123 0       2443    2010/09/01  2011/01/02          
123 1       131     2011/01/03  2011/03/09
123 2       131     2011/08/10  2012/09/10
123 3       3009    2012/09/11  2014/03/31
123 4       668     2014/04/01  2014/04/30
123 5       668     2014/05/01  2016/01/01
123 6       668     2016/01/02  2017/09/08
123 7       131     2017/09/09  2017/10/10
123 8       131     2018/10/11  2019/01/01
123 9       550     2019/01/02  2099/01/01

select *,
dense_rank()over(partition by id order by id,product)
from table

预期结果:

id  version product startdate   enddate      count
123 0       2443    2010/09/01  2011/01/02  1       
123 1       131     2011/01/03  2011/03/09  2
123 2       131     2011/08/10  2012/09/10  2
123 3       3009    2012/09/11  2014/03/31  3
123 4       668     2014/04/01  2014/04/30  4
123 5       668     2014/05/01  2016/01/01  4
123 6       668     2016/01/02  2017/09/08  4
123 7       131     2017/09/09  2017/10/10  5 
123 8       131     2018/10/11  2019/01/01  5
123 9       550     2019/01/02  2099/01/01  6

1 个答案:

答案 0 :(得分:0)

尝试以下

SELECT
  id,version,product,startdate,enddate,
  1+SUM(v)OVER(PARTITION BY id ORDER BY version) n
FROM
  (
    SELECT
      *,
      IIF(LAG(product)OVER(PARTITION BY id ORDER BY version)<>product,1,0) v
    FROM TestTable
  ) q