2016-11-17 4 views
2

私は、トランザクションの履歴、主にコメントの更新を格納するデータベースを持っています。したがって、私は同じIDを持つ複数のレコードを受け入れます。最新の日付を持つすべてのレコードを選択する

私がする必要があるのは、すべてのレコードをプルし、各レコードの最新のものを表示することです。

ここでは、同じUIDを持つ2つのレコードの例を示します。

result from database:ここ

SELECT 
    uid 
    ,voyage 
    ,MAX(comments) 
    ,MAX(edituser) 
    ,MAX(editdate) 
FROM 
    table 
GROUP BY 
    uid 
ORDER BY 
    uid 

が返されるのと同じUIDである:ハイライトされたレコードは、ここで私がしようとしたクエリの一つである2

2 rows from database

の最も最近のものです

これは最新のユーザーと編集日ですが、最新のコメントではありません'これはテストコメントです。'

私はいくつかのクエリを試しましたが、これは最も最近のすべてのレコードを返すことになっています。

私は、このリンクを試してみました:SQL Select record with most recent date

をしかし、私は、私はすべてのすべてが同じテーブルにあるということで、この場合には結合を使用する必要はないと思います。しかし、再び、私の強みはMYSQLにはありません。

私は誰かがこの仕事をするための正しい(そしてより良い)クエリを提供することで私を助けてくれることを願っています。それはあなたの所望の出力は、その後もあなたが降順でeditdateにによってかわりMIN(comments)

+0

この場合、私はあなたが提供したリンクのような結合とサブクエリを使用する必要があると考えています。 –

答えて

1

をこのようなものを使用すると、使用してオフにおそらく優れていますサブ選択する。

SELECT 
    t1.uid, 
    t1.voyage, 
    (SELECT comments FROM table t2 WHERE t2.uid = t1.uid AND t2.editdate = MAX(t1.editdate) LIMIT 1) as comments, 
    (SELECT edituser FROM table t2 WHERE t2.uid = t1.uid AND t2.editdate = MAX(t1.editdate) LIMIT 1) as edituser, 
    (SELECT editdate FROM table t2 WHERE t2.uid = t1.uid AND t2.editdate = MAX(t1.editdate) LIMIT 1) as editdate, 
FROM table t1 
GROUP BY t1.uid 
ORDER BY t1.uid 

各サブ選択は同じuidにそれを絞り込ん、その後、editdate、最新のものを取ります。

+0

これで十分です。ありがとうございました。 –

1

は:

... ORDER BY editdate DESC 
+0

それを試してみましたが、間違ったコメントで同じレコードを返しています。何かご意見は? –

+0

@JohnBeasley、それをはっきりと見ていない... 'min()'集計関数を使うべきです – Rahul

+0

'MIN(コメント)'は最初のコメントを辞書的に取り込むだけでしょうか?私はそれがOPが望んでいるとは思わない –

0

変更ご注文のようなMIN()を使うべきだ場合

関連する問題