GROUP BY でレコードのサブセットを取得しようとしています。多くのクレイジーなソリューションを見てきましたが、複雑すぎるようです。これを行うためのより効率的な方法はありますか?
SELECT user_id, GROUP_CONCAT(item_id ORDER BY `timestamp`) AS items
FROM wb_user_book_current_item GROUP BY user_id
したがって、これにより、すべてのユーザーの現在のすべてのアイテムが返されますが、これまでのところ問題ありません。しかし、最新の 10 個のアイテムだけが必要です。ヘルプに追加ORDER BY
しGROUP_CONCAT
ますが、それでも最後の 10 レコードは表示されません。
編集
このようなことをしてハードコーディングするとuser_id
、その1人のユーザーに必要な結果を得ることができます.問題はそれを組み合わせて、ハードコーディングする必要がなく、たとえば、すべてのユーザーの最後の10項目user_id
を取得できるようにすることです.
SELECT GROUP_CONCAT(cp2.item_id) AS items
FROM (SELECT cp.user_id, cp.item_id
FROM wb_user_book_current_item cp
WHERE cp.user_id=1 ORDER BY cp.`timestamp`
LIMIT 10) AS cp2
GROUP BY cp2.user_id