2017-06-12 67 views
1

最新记录我有一个sql view,它看起来像下面的数据选择MySQL视图

leadId status statusTime 
-------------------------- 
1361 new  2017-06-12 11:57:33 
1358 new  2017-06-12 11:20:46 
1358 warm 2017-06-12 11:21:20 
1358 closed 2017-06-12 11:56:57 

你可以看到leadId 13583 lead status,最后一个是latest。所以我想要下面的记录表

leadId status statusTime 
-------------------------- 
1361 new  2017-06-12 11:57:33 
1358 closed 2017-06-12 11:56:57 

我该怎么做到这一点?谢谢

+0

试试这个:选择最大(lead_id),从表组状态statusTime通过lead_id,状态statusTime –

+0

最大(lead_id)可能不正确@MuhammadMuazzam他需要检索基于statusTime –

+0

是的,您的查询拉动最旧的记录。但我需要最新的记录基于statusTime –

回答

0

在MySQL中处理此问题的一种典型方法是将您的视图加入到子查询中,该子查询标识每个leadId的最新状态时间。除了那些最近的记录,此联接会过滤掉所有记录。

SELECT v1.* 
FROM yourView v1 
INNER JOIN 
(
    SELECT leadId, MAX(statusTime) AS max_status_time 
    FROM yourView 
    GROUP BY leadId 
) v2 
    ON v1.leadId  = v2.leadId AND 
     v1.statusTime = v2.max_status_time 

另一种方法是使用相关的子查询,但这可能不会像上面给出的那样好。

Demo

+0

这使查询非常缓慢。我必须等待4-5分钟才能得到结果 –

+0

我的猜测是,缓慢是由于视图,而不是我的查询策略,这可能应该用在这里。您可以尝试直接在表上而不是视图上运行查询。另外,您的视图/表有多少条记录? –

+0

表中有很多数据(大约有3000个数据),而且我无法在表上运行查询,我必须在视图上运行,因为许多数据都是从另外两个表中收集的。 –

0
select leadId,status,statusTime 
from your_view 
where (leadId,statusTime) 
    IN (select leadId,MAX(statusTime) as maxStatusTime 
     from your_view 
     GROUP BY leadId) 

首先找到最新statusTime的条目,然后用它来了解详细内容