PL-SQL のソリューションは次のとおりです: DB Fiddle Example
-- select based on runtime calculation
select a.last_active_date
, case
when (sysdate - a.last_active_date) <= 30 then 'Inactive 30 Days or Less'
when (sysdate - a.last_active_date) <= 60 then 'Inactive 30-60'
when (sysdate - a.last_active_date) <= 120 then 'Inactive 60-120'
else 'Inactive 120+ Days'
end Inactivity
from demo a
order by a.last_active_date desc
これがT-SQLの答えです:DB Fiddle Example
select a.last_active_date
, case
when getutcdate() - a.last_active_date <= 30 then 'Inactive 30 Days or Less'
when getutcdate() - a.last_active_date <= 60 then 'Inactive 30-60'
when getutcdate() - a.last_active_date <= 120 then 'Inactive 60-120'
else 'Inactive 120+ Days'
end Inactivity
from @t a
order by a.last_active_date desc
テストデータを使用して上記の例をセットアップするコードは次のとおりです。
declare @t table (last_active_date datetime)
insert @t select getutcdate()
union select getutcdate()-29
union select getutcdate()-30
union select getutcdate()-31
union select getutcdate()-59
union select getutcdate()-60
union select getutcdate()-61
union select getutcdate()-119
union select getutcdate()-120
union select getutcdate()-121
これの利点は、getutcdate() - a.last_active_date
関数の再利用により結果のキャッシュが可能になるため、計算のオーバーヘッドがいくらか節約されることです。