2013-05-30 78 views
-3

我在记录最长效期记录之后尝试记录最早/最短记录的困难时间。从最长期记录中捕获最短生效日期记录

例子:

Status Date 
Active 8-1-2013 
Active 7-2-2013 
Active 6-1-2012****this is the date I need 
Term  5-30-2012 
Active 4-12-2012 
Term  3-5-2012

你有什么建议吗?

+0

考虑到'4-12-2012'小于'Active'组中的'6-1-2012',你用什么逻辑来确定'6-1-2012'在这里是最小的? – Kermit

+0

你的问题不清楚。你可以解释吗? –

+0

@FreshPrinceOfSO我得到了一个印象,那就是最早的日期是从具有活跃状态的记录开始,该活动状态在最近的日期之后,从具有条件状态的记录开始。 –

回答

2

如果我理解正确的话,

select min(Date) from table where status = 'Active' and Date > 
(select max(Date) from table where Status = 'Term') 
+0

谢谢!上面的代码工作!你知道如何添加一个else语句,如果没有term记录,那么得到第一个活动记录的最小值?仅有活动的记录从我的数据集中删除。 – user2438137

+0

@ user2438137,对于这种情况,使用虚拟开始日期,就像这样,从表中选择min(Date),其中status ='Active'且Date> isnull( (从表中选择max(日期)),其中Status ='Term' ),'19000101')' – iruvar

+0

它几乎奏效。我能够捕获所有没有期限日期的活动记录,但是我从上面的原始请求中丢失了正确的活动记录日期。 – user2438137

0

这里是语法,在MySQL工作:

select t.* 
from t 
where t.date > (select MAX(t.date) from t where status = 'TERM') 
order by date 
limit 1; 

在其他的数据库中,limit 1可能是select top 1where rownum = 1甚至别的东西。

如果你只是想要日期,那么你可以使用1_CR的解决方案。