1

次のクエリを使用して、いくつかの条件を持つ最新のレコードを取得するソリューションを探しています。しかし、最新のレコードではなく、最初のレコードが表示されます。グループのみを考慮していると思います 教えてください

SELECT * FROM `contacts` WHERE `id_receiver`=1  GROUP BY `id_thread` ORDER BY created DESC

id   id_sender   id_thread sender_email   id_receiver      created(datetime)
1    2             2         51             1                2012-03-24 13:44:48
2    4             4         1              5                 2012-04-26 13:46:05
3    2             2         51             1                2012-04-09 12:12:30

必要な出力

id   id_sender  id_thread sender_email   id_receiver      created(datetime)
3    2           2         51             1                2012-04-09 12:12:30

order by と group by を交換するだけのテストを行ったところ、エラーが発生しました。

誰でもこれを調べることができますか?. ありがとう。

EDIT編集された質問、id_threadを書くのを忘れて

4

2 に答える 2

3

テーブルに列GROUP BY id_threadがない場合、どうすればよいでしょうか?id_thread

SELECT * 
FROM contacts 
WHERE id_receiver = 1 
                                 --- GROUP BY id_thread
                                 --- removed 
ORDER BY created DESC
LIMIT 1                          --- only show one row

あなたのコメントに基づいて、あなたが望むのは、別のより複雑なクエリであるcreatedすべての最新の( で並べられた)行です。id_threadこの種のクエリには、 という名前のタグさえあり[greatest-n-per-group]ます。

SELECT c.* 
FROM contacts AS c
  JOIN
    ( SELECT id_thread, MAX(created) AS created 
      FROM contacts 
      WHERE id_receiver = 1  
      GROUP BY id_thread
    ) AS g 
    ON (g.id_thread, g.created) = (c.id_thread, c.created) 
WHERE c.id_receiver = 1  
于 2012-04-09T07:39:00.880 に答える
0

レコードが id で SORT するよりもシーケンシャルになる場合 -- レコードがシーケンシャルな順序で作成された場合のみ --

于 2012-04-09T07:26:06.140 に答える