admin

如何在Oracle中获得当前的生效日期?

sql

我有一个如下表:

TID TName有效日期
1 A 2011-7-1
2 A 2011-8-1
3 A 2011-9-1
4 A 2011-10-1
5 B 2011-8-1
6 B 2011-9-1
7 B 2011-10-1
8 C 2011-9-1

如果今天是2011-9-10,我希望查询结果是这样的:

TID TName有效日期状态
1 A 2011-7-1无效
2 A 2011-8-1无效
3 A 2011-9-1有效
4 A 2011-10-1不活动
5 B 2011-8-1无效
6 B 2011-9-1有效
7 B 2011-10-1无效
8 C 2011-9-1有效

如果今天是2011-10-2,则查询结果将如下所示:

TID TName有效日期状态
1 A 2011-7-1无效
2 A 2011-8-1无效
3 A 2011-9-1无效
4 A 2011-10-1有效
5 B 2011-8-1无效
6 B 2011-9-1无效
7 B 2011-10-1有效
8 C 2011-9-1有效

查询结果将再添加一个名为“状态”的列,并且状态值基于今天的值并将其与列生效日期进行比较。最长有效日将显示为“有效”状态。如果今天的值介于两个记录之间,则后者为“非活动”状态。

如何编写语句以在oracle中获得此结果?


阅读 444

收藏
2021-07-01

共1个答案

admin

尝试:

select TID,
       TName,
       EffectiveDate,
       decode(sign(EffectiveDate - (select max(T2.EffectiveDate) 
                                    from MyTable T2
                                    where T1.Tname=T2.Tname and 
                                          T2.EffectiveDate <= sysdate)),
              -1,'Invalid',
              0,'Valid',
              'Inactive') Status
from MyTable T1
2021-07-01