在重复值列表中查找首次出现的值

时间:2014-12-03 00:03:43

标签: mysql

我有一个表存储应用程序所经历的状态。某些应用程序会多次执行相同的状态。每次进入状态时,都会记录状态变化的时间。

如何根据应用程序在指定日期范围内首次执行特定状态来提取应用程序列表。以下是我到目前为止所尝试的内容:

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;

1 个答案:

答案 0 :(得分: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上的索引。