Translate

2016年2月17日水曜日

【mysql】各キーの最新ログ5件を取得したい

全IDの最新ログ5件を表示

logテーブルから、各IDごとの最新ログ5件を拾いたいとき。
IDを指定できるなら
SELECT `id` , group_concat(`status` separator ',') as "recent_log" from ( SELECT * FROM `log` WHERE `id` ="hoge" order by date limit 5 ) as Table1
これが手っ取り早い。ただし、受信した側で処理する必要がある。

行を別々にとりたいというとき
SELECT * FROM log as Table1 WHERE (SELECT COUNT(*) FROM log as Table2 WHERE Table2.id = Table1.id AND Table2.date > Table1.date) < 3 AND id ="hoge" ORDER BY id DESC, date DESC
ただし、処理がかなり重い。件数の多いlogテーブルとかで使うのは実用的ではないかも

これを、例えば役員(officer)の最近ログ5件を全て表示!安全にサボりたい!としたいときはこんな感じ
SELECT * FROM log as Table1 WHERE (SELECT COUNT(*) FROM log as Table2 WHERE Table2.id  = Table1.id AND Table2.date > Table1.date) < 5 AND id in ( select id from id_table where class ="officer" ) ORDER BY id DESC, date DESC
こちらも、もちろん処理が重い

0 件のコメント:

コメントを投稿