我有一个如下表:
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中获得此结果?
尝试:
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