sql,只返回表中记录的最大版本

时间:2014-09-01 08:41:57

标签: sql sql-server tsql max

我有下表有几个关键字段。最重要的是版本和日期。 enter image description here 我需要一个查询,允许我在系统中显示每个公司和产品的有效价格。

所以显示开始和结束之间的所有日期,很容易 只显示带有这些结果的最大版本 - 这就是我被困住的地方。

我创造了一个小提琴来展示我的榜样 http://sqlfiddle.com/#!6/e0d4f/3

如何只返回日期范围内具有最高版本的每家公司和产品的记录?

这是我到目前为止所做的但不完整的:

select * from 
prices
where getdate() between [start] and [end] 
--and max(version)

2 个答案:

答案 0 :(得分:3)

;WITH PricesCTE AS
(
  SELECT *,
         ROW_NUMBER()OVER(PARTITION BY companyid,product ORDER BY version DESC) AS rn
  FROM   prices
  WHERE  GETDATE() BETWEEN [start] AND [end]
)
SELECT * 
FROM   PricesCTE 
WHERE  rn = 1

<强> SQLFiddle Demo

答案 1 :(得分:1)

首先找到所需日期的每个产品的最高版本。然后加入你的桌子以获得该记录。

select * 
from 
(
  select companyid, product, max(version) as max_version 
  from prices
  where getdate() between [start] and [end]
  group by companyid, product
) this_date 
inner join prices
  on prices.companyid = this_date.companyid
  and prices.product = this_date.product 
  and prices.version = this_date.max_version;

这是SQL小提琴:http://sqlfiddle.com/#!6/e0d4f/32