我需要将一组日期归类为’Cur. YTD’,’Lst. YTD’或’其他’. YTD基于getdate().我有一个临时表供测试,它有一个名为’calendar_date’的DATETIME类型的列.我提出了这个逻辑,似乎有效.我只是想知道这种方法从性能角度来看是否合理,或者其他东西可能更好.
select calendar_date,
case when (MONTH(calendar_date) < MONTH(getdate()))
or (MONTH(calendar_date) = MONTH (getdate())
AND DAY(calendar_date) <= DAY(getdate())) then
case when YEAR(calendar_date) = YEAR(GETDATE()) then 'CYTD'
when YEAR(calendar_date) = YEAR(getdate()) - 1 then 'LYTD'
else 'Other'
end
else 'Other'
end as Tim_Tag_YTD
from #temp1
最佳答案 你的逻辑看起来很好,并且会按原样工作.
一种简化一点的替代方案,假设您没有未来的数据.
select
calendar_date,
Tim_Tag_YTD = case DATEDIFF(YEAR, calendar_date, GETDATE())
when 0 then 'CYTD'
when 1 then 'LYTD'
else 'Other'
end
from #temp1;
对于您的逻辑,您明确将未来数据放入“其他”,您也可以这样做:
select
calendar_date,
Tim_Tag_YTD = case when calendar_date > GETDATE() then 'Other' else
case DATEDIFF(YEAR, calendar_date, GETDATE())
when 0 then 'CYTD'
when 1 then 'LYTD'
else 'Other'
end
end
from #temp1;