获取最新版本的产品

时间:2016-05-31 23:04:15

标签: sql greatest-n-per-group

我有一张表格,用于输入产品数据(SlobID)

SELECT        TemplateID, SlobID, FromYear, ToYear, MAX(ValidFrom) AS CurrentDate
FROM            CommissionsPerTemplate AS CommissionsPerTemplate_1
GROUP BY TemplateID, SlobID, FromYear, ToYear
HAVING        (MAX(ValidFrom) <= GETDATE()) AND (TemplateID = 2) AND (SlobID = 743)

我得到的结果是

TemplateID  SlobID  (From Year)  (To year)   Valid date
2            743        1          1        2016-01-01
2            743        1            99     2015-01-01
2            743        2            99     2016-01-01

困难的部分是我们需要查询才能获得该产品的最新版本。 第1版(2015年1月1日),如果从年份= 1到年份= 99 但是(2016年1月1日)创建的第2版本分裂了多年 从1年级到1年级,从第2年到第99年。

所以对我来说正确的结果应该是以下

TemplateID  SlobID  (From Year)  (To year)   Valid date
2            743        1            1      2016-01-01
2            743        2            99     2016-01-01

但我不知道如何得到这个。 也许在2017年1月1日,新版本应该从年份= 1到年份= 10,从年份= 11到年份= 99或其他。

1 个答案:

答案 0 :(得分:0)

不确定这是否适用于其余数据,但如果您使用row_number而不是group by并取出&#34;到年份&#34;来自分区,它适用于您的样本数据。

select * from 
(
SELECT        TemplateID, SlobID, FromYear, ToYear, ValidFrom As CurrentDate , row_number () over ( partition by TemplateID, SlobID,FromYear  order by ValidFrom desc) rowid
FROM            CommissionsPerTemplate AS CommissionsPerTemplate_1
where  (TemplateID = 2) AND (SlobID = 743)
) as x 
where rowid = 1