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

そして私は結果が欲しい

これが私が試したクエリです
select * from table where userid IN(201,202,203,204,205)
group by userid
order by messageid desc
しかし、メッセージ ID に基づいて最新のレコードを取得することはできません。order by句を使用する必要があるため、これを単一のクエリで記述する必要があります
私の間違いを説明し、解決策を提供してください
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
あなたの質問を正しく理解している場合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