比较SQL Server中的多个列,按产品返回小于或等于给定值的最大版本

时间:2015-08-18 23:43:17

标签: sql sql-server-2008 tsql

使用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      

2 个答案:

答案 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 +月

中做同样的事情