2011-12-21 209 views
3

我有其中列說事的樣子像這樣的表按組的一部分(或其他解決方案...):選擇最近的

username 
source 
description 

我的目標是讓最近10個記錄用戶/來源組合的唯一性。從以下數據:

1 katie facebook loved it! 
2 katie facebook it could have been better. 
3 tom  twitter  less then 140 
4 katie twitter  Wowzers! 

查詢應返回記錄2,3和4(假設較高的ID是最近的 - 實際表使用時間戳列)。

我目前的解決方案'工作',但需要1選擇產生10條記錄,然後1選擇以獲得每行適當的描述(所以11選擇產生10條記錄)...我必須想象有一個更好的方法去。該解決方案:

SELECT max(id) as MAX_ID, username, source, topic 
FROM events 
GROUP BY source, username 
ORDER BY MAX_ID desc; 

它返回正確的ID,但錯誤的描述,所以我可以再選擇由記錄ID的正確描述。

回答

1

未經檢驗的,但你應該能夠處理這個join

SELECT 
    fullEvent.id, 
    fullEvent.username, 
    fullEvent.source, 
    fullEvent.topic 
FROM 
    events fullEvent JOIN 
    (
     SELECT max(id) as MAX_ID, username, source 
     FROM events 
     GROUP BY source, username 
    ) maxEvent ON maxEvent.MAX_ID = fullEvent.id 
ORDER BY fullEvent.id desc; 
+0

我試過類似的東西,而是試圖'WHERE ID在(... ...子查詢)',它有一個3分鐘執行時間。關閉試試這個,希望它的速度更快:) – Will 2011-12-21 21:00:54

+0

謝謝你,謝謝你,謝謝。有33,000行的事件表爲51毫秒。 – Will 2011-12-21 21:12:48