我有一张表格,用于输入产品数据(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或其他。
答案 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