2014-12-03 108 views
0

我有一张表,用于存储应用程序所经历的状态。有些应用程序会多次经历相同的状态。每次它经历一个状态时,状态改变的时间都被记录下来。在重复值列表中查找首次出现的值

如何根据第一次应用程序在特定日期范围内经历特定状态来提取应用程序列表。下面是我迄今为止尝试:

SELECT d1.STATUS, 
d1.APPL_ID 
FROM APP_STATUS d1 
LEFT JOIN APP_STATUS d2 ON d1.APPL_ID = d2.APPL_ID AND d1.STATUS = 'AT_CUSTOMER' AND d2.STATUS = 'AT_CUSTOMER' 
    WHERE DATE(d1.STATUS_CREATE_DT) >= '2014-10-26' 
    AND DATE(d1.STATUS_CREATE_DT) <= '2014-11-25' 
    AND d2.STATUS IS NULL 
     GROUP BY d1.APPL_ID; 
+0

如果您愿意,请考虑遵循以下简单的两步操作步骤:1.如果您尚未这样做,请提供适当的DDL(和/或sqlfiddle),以便我们可以更轻松地复制问题。 2.如果您尚未这样做,请提供与步骤1中提供的信息相对应的所需结果集。 – Strawberry 2014-12-03 00:08:41

回答

0

要在第一时间拿到状态经历,尝试此查询:

select a.appl_id, min(status_create_dt) as first_dt 
from ap_status 
where d.STATUS_CREATE_DT >= '2014-10-26' and 
     d.STATUS_CREATE_DT < date('2014-11-25') + interval 1 day and 
     d2.STATUS IS NULL 
group by a.appl_id; 

我认为这确实你需要什么。如果您想要更多列,那么您可以将其加入ap_status

请注意,我稍微改变了日期逻辑。日期函数仅在日期的恒定一侧。这允许查询利用STATUS_CREATE_DT上的索引(如果适用)。