2011-12-21 4 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は、より最近ですと仮定)レコードを返す必要があります。

私の現在の解決策は動作しますが、10個のレコードを生成するために1個の選択を必要とし、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:私は似たような試みたが、WHEREのid(...サブクエリ...) `未遂`と、それは3を持っていた

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

分実行時間。これを試して、うまくいけば少し速く:) – Will

+0

ありがとう、ありがとう、ありがとう。 33,000行のイベント表で51ミリ秒。 – Will

関連する問題