使用SQL Server 2008,我正在尝试编写一个select语句,该语句将查询下面的数据并为每个Product返回一行,查找小于或等于给定版本号的最大产品版本。
样本数据
Product Major Minor
======= ====== ======
Widgets 10 1
Widgets 6 6
Widgets 4 92
Gears 9 2
Gears 10 0
Tires 8 3
Tires 7 14
鉴于版本=主要:10次要:0
预期结果
Product Major Minor
======= ====== ======
Widgets 6 6
Gears 10 0
Tires 8 3
答案 0 :(得分:0)
select product, major, minor
from (
select *,
row_number() over(partition by product order by major desc, minor desc) as rn
from tablename
where major <= @someval1 and minor <= @someval2) t
where t.rn = 1
您可以使用row_number
函数替换变量@ someval1和@ someval2的值。
答案 1 :(得分:0)
我通常会发现从Major发出一个数字:10次要:0使得阅读更清晰。如下所示:
SELECT p.Product, p.Major, p.Minor
FROM Products p
JOIN (SELECT sub.Product,
MAX(sub.Major * 10000 + sub.Minor) AS MaxVersion
FROM Products AS sub
GROUP BY sub.Product) AS Maxes
ON p.Product = Maxes.Product
AND p.Major * 10000 + p.Minor = Maxes.MaxVersion
WHERE Maxes.MaxVersion <= @Major * 10000 + @Minor
我通常会在年* 100 +月
中做同样的事情