Вам необходимо выполнить некоторый анализ, чтобы получить желаемый результат.
Сначала вы разбиваете номера версий на отдельные целые, затем присваиваете row_number
на их основе, а затем на основе номера строки выпоместите 1-true или 0-false в дополнительный столбец, который я назвал IsLatest
.
. В SQL Server нет true
или false
, вы можете использовать BIT
тип данных, который имеетдва значения (как логическое): 1 и 0.
Попробуйте этот запрос:
declare @tbl table(ID int,Name varchar(20),[Key] varchar(10),Version varchar(10));
insert into @tbl values
(1,'CoverLetter','<guid1>','1.00.00'),
(2,'Contract','<guid2>','1.00.00'),
(3,'CoverLetter','<guid1>','1.00.01');
select ID, [Key], [version],
case when rn = 1 then 1 else 0 end IsLatest
from (
select *,
row_number() over (order by
cast(substring([version], 1, FirstDot - 1) as int) desc,
cast(substring([version], FirstDot + 1, SecondDot - FirstDot - 1) as int) desc,
cast(substring([version], SecondDot + 1, 100) as int) desc) rn
from (
select ID, [Key], [version],
charindex('.', [version]) FirstDot,
charindex('.', [version], charindex('.', [version]) + 1) SecondDot
from @tbl
) a
) a