我有下表有几个关键字段。最重要的是版本和日期。 我需要一个查询,允许我在系统中显示每个公司和产品的有效价格。
所以显示开始和结束之间的所有日期,很容易 只显示带有这些结果的最大版本 - 这就是我被困住的地方。
我创造了一个小提琴来展示我的榜样 http://sqlfiddle.com/#!6/e0d4f/3
如何只返回日期范围内具有最高版本的每家公司和产品的记录?
这是我到目前为止所做的但不完整的:
select * from
prices
where getdate() between [start] and [end]
--and max(version)
答案 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。