在我们的系统中,项目会根据可用时间而有不同的版本。 例如。 “工具1”项目的版本可用于以下日期:
因此,我在DB中的“工具”表是
ItemCode | ParentCode | EffectiveFrom
1 | 1 | 01.01.2015
2 | 1 | 01.01.2016
3 | 1 | 01.02.2016
4 | 1 | 01.01.2016
现在,Mgmt想知道哪些物品正在销售,哪些物品即将推出。 ParentCode指的是项目的第一个版本。
因此,他们需要ItemCodes 2(目前正在销售)和3,4(即将推出)。无法找到一种方法让SELECT获得这些。
使用“Microsoft SQL Server Management Studio 2012”。
感谢您的帮助。
此致
答案 0 :(得分:2)
我认为这只是对当前日期的比较以及有关下一个日期的信息。
最好将结束日期直接放在表中,但在SQL Server 2012+中,可以使用lead()
轻松计算:
select t.*,
(case when effectivefrom >= getdate() then 'Coming Soon'
else 'Currently Sold'
end) as timingStatus
from (select t.*,
lead(effectivefrom) over (partition by parentcode order by effectivefrom) as next_effectivefrom
from tools t
) t
where next_effectivefrom is null or next_effectivefrom >= getdate();
注意:这使用具有时间组件的getdate()
。你的约会时间可能不合适。所以,我认为以下内容稍微准确一些:
select t.*,
(case when effectivefrom > cast(getdate() as date) then 'Coming Soon'
else 'Currently Sold'
end) as timingStatus
from (select t.*,
lead(effectivefrom) over (partition by parentcode order by effectivefrom) as next_effectivefrom
from tools t
) t
where next_effectivefrom is null or
next_effectivefrom > cast(getdate() as date);
答案 1 :(得分:0)
这个答案可能不是你想要的答案,但你可以试试这个:
SELECT *
FROM Tools
WHERE EffectiveForm > CONVERT(NVARCHAR(10),GETDATE(),104)
OR (MONTH(EffectiveForm) = MONTH(GETDATE())
YEAR(EffectiveForm) = YEAR(GETDATE()))