1

次のテーブル構造があります

ここに画像の説明を入力

そして私は結果が欲しい

ここに画像の説明を入力

これが私が試したクエリです

select * from table where userid IN(201,202,203,204,205)
group by userid
order by messageid desc

しかし、メッセージ ID に基づいて最新のレコードを取得することはできません。order by句を使用する必要があるため、これを単一のクエリで記述する必要があります

私の間違いを説明し、解決策を提供してください

4

2 に答える 2

2
SELECT yourtable.*
FROM
  yourtable INNER JOIN (SELECT userid, MAX(messageid) max_messageid
                        FROM yourtable
                        WHERE userid IN (201,202,203,204,205)
                        GROUP BY userid) mx
  ON yourtable.messageid=mx.max_messageid
     AND yourtable.userid=mx.userid
于 2013-10-17T16:16:34.577 に答える
2

あなたの質問を正しく理解している場合maxは、のを使用してテーブルをそれ自体に結合できます。messageid

select t.messageid, t.userid, t.data
from yourtable t
  join (
    select max(messageid) maxmessageid, userid
    from yourtable
    where userid in (201,202,203,204,205)
    group by userid
    ) t2 on t.userid = t2.userid and t.messageid = t2.maxmessageid
order by t.messageid desc

IN編集: を使用した代替アプローチを次に示します。

select messageid, userid, data
from yourtable
where messageid in (
    select max(messageid) maxmessageid
    from yourtable
    where userid in (201,202,203,204,205)
    group by userid
    ) 
order by messageid desc
于 2013-10-17T16:16:41.480 に答える