我想生成一个与SerialNumber,VersionId和VersionDate相关联的唯一行号;唯一的警告是如果版本翻转回旧版本我想从1再次重新启动Srno。简而言之,而不是SrNo 5和6我需要1和2.任何对此的帮助都非常感谢。
create table #t1 ( SerialNumber int, VersionId int, VersionDate datetime)
insert into #t1 ( SerialNumber, VersionId, VersionDate )
values ( 13000, 1,'2018-06-01 11:09:41'),
( 13000,1,'2018-06-01 11:39:41 '),(13000,1,'2018-06-01 12:09:41'),(13000,1,'2018-06-01 12:39:41'),(13000,2,'2018-06-01 13:09:42'),(13000,2,'2018-06-01 13:39:42'),(13000,1,'2018-06-01 14:01:42'),(13000,1,'2018-06-01 14:51:40')
select SerialNumber,VersionId , VersionDate, rank() OVER( PARTITION BY SerialNumber,VersionId ORDER BY VersionDate) As SrNo
FROM #t1
order by VersionDate
SerialNumber VersionId VersionDate SrNo
13000 1 2018-06-01 11:09:41.000 1
13000 1 2018-06-01 11:39:41.000 2
13000 1 2018-06-01 12:09:41.000 3
13000 1 2018-06-01 12:39:41.000 4
13000 2 2018-06-01 13:09:42.000 1
13000 2 2018-06-01 13:39:42.000 2
13000 1 2018-06-01 14:01:42.000 5
13000 1 2018-06-01 14:51:40.000 6
;
WITH cte
AS ( SELECT SerialNumber, versionid, VersionDate, maxdate
FROM #t1 a
OUTER APPLY ( SELECT MAX(versiondate) maxdate
FROM #t1
WHERE VersionDate < a.VersionDate
AND VersionId <> a.VersionId
) k1
)
SELECT SerialNumber
, VersionId
, VersionDate
, RANK() OVER ( PARTITION BY maxdate ORDER BY versiondate ) AS srno
FROM cte