如何使用sql server创建与等级或任何其他功能相关的更改日期时间的序列号

问题描述 投票:0回答:1

我想生成一个与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
sql-server using rank
1个回答
0
投票
;
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 
© www.soinside.com 2019 - 2024. All rights reserved.