2017-10-31 9 views
0

私は以下の構造のテーブルを持っています。私は必要なものデータベースからDISTINCT行を別のフィールドの順に選択する

enter image description here

DISTINCT personal_idでテーブルから行を選択することですが、順序または減少タイムスタンプに。だから、私はORDER BYを実行しようとしましたが、クエリは次のようになりました。

SELECT DISTINCT personal_id 
FROM comment_ballon 
WHERE ballon_id= ? 
    and timestamp >=? 
ORDER BY timestamp DESC 

しかし、それは、クエリのSELECT部分​​ではなかったのでobviosuly、私は、タイムスタンプの順序で行を注文することができないので、私はそれを行うことができませんでした。 なので、タイムスタンプの部分をクエリに追加して、期待通りにDISTINCTの部分を乱しました(すべての行が返されました。

私はグループを使用しようとしましたが、もう一度、タイムスタンプDESCが乱雑でした。

SELECT personal_id, timestamp 
FROM comment_ballon 
WHERE ballon_id = ? 
    and timestamp >= ? 
GROUP BY personal_id 
ORDER BY timestamp DESC 

は、どのように私はユニークなpersonal_idsに基づいて行を選択することで、しかし同時に、DESCのタイムスタンプの順序によって、これを達成することができますか?

+0

同じ 'personal_id'を持つ異なる行は、* different *' timestamp'値を持つことがあります。 * *タイムスタンプは注文に使用されるものですか? –

答えて

3
SELECT personal_id, max(timestamp) as latest 
FROM comment_ballon 
WHERE ballon_id=? and timestamp>=? 
group by personal_id 
ORDER BY latest DESC 

idとget max timestampでグループ化できます。最大タイムスタンプによる注文

1

この場合、どうですか?

select personal_id, timestamp 
from 
(
select personal_id, min(timestamp) as timestamp 
from comment_ballon WHERE ballon_id=? and timestamp>=? 
group by personal_id 
) as a 
order by timestamp desc 
+0

私はあなたの質問にmax(タイムスタンプ)とNOT min(timestamp)を意味すると思います。 –

+0

@aiswaryakrishna - タイムスタンプの値を使うべきことをあなたに教えてくれたことがないので、 'min()'は 'max()'と同じくらい良いと思います。 –

0

これは動作しますが、フィドルを確認してください。

http://sqlfiddle.com/#!9/65a79/2

これは、MySQL 5.6を使用していますが、他のRDBMSと異なる場合がありますが、あなたは、MySQLとの質問にタグ付け。

+0

明確でわかりやすい例が必要な場合は、ランダムなIDの代わりに独自のIDを追加することができます。 –

+0

答えに*実際のコード*を含めてください。 sqlfiddleがダウンした場合、または完全に見つからない場合、またはクリーンアップしてそこからコードを削除した場合、将来の読者は*役に立たない*となります。 –

関連する問題