2017-06-12 45 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的條目,然後用它來了解詳細內容