with a as
(
select * from ( values('2.1.4 '), ('2.1.12'), ('2.1.5'), ('2.2.1') ) as b(c)
),
x as
(
select c,
Ranking = RANK()
over(order by
convert(int,PARSENAME(c,3)),
convert(int,PARSENAME(c,2)),
convert(int,PARSENAME(c,1)))
from a
)
select *
from x;
-- PARSENAME usage is inspired by http://www.sql-server-helper.com/tips/sort-ip-address.aspx
Output:
c Ranking 2.1.4 1 2.1.5 2 2.1.12 3 2.2.1 4
To get the latest version, just sort the query in descending order then get the row with the ranking of 1:
with a as
(
select * from ( values('2.1.4 '), ('2.1.12'), ('2.1.5'), ('2.2.1') ) as b(c)
),
x as
(
select c,
Ranking = RANK()
over(order by
convert(int,PARSENAME(c,3)) desc,
convert(int,PARSENAME(c,2)) desc,
convert(int,PARSENAME(c,1)) desc)
from a
)
select *
from x
where Ranking = 1
Output
c Ranking 2.2.1 1
No comments:
Post a Comment