Как создать серийный номер, связанный с изменяющейся датой и временем с помощью ранга или любой другой функции, используя сервер SQL - PullRequest
0 голосов
/ 31 августа 2018

Я хочу создать уникальный номер строки, привязанный к SerialNumber, VersionId и VersionDate; Единственное предостережение: если версия возвращается к старой версии, я хочу перезапустить Srno с 1. Короче, вместо 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

1 Ответ

0 голосов
/ 31 августа 2018
;
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 
...