MySQLの:ユーザーごとに最後の10のエントリは?
質問
私は、ユーザーのトランザクションデータを格納するテーブルを持っています。あなたは、そのユーザのための最後の10項目の平均スコアを取るレーティングユーザーを検索するには。 SQLでそれを取得する方法はありますか?
私は自分のIDを指定して、単一のユーザーのためにそれをうまくできるようにする必要があります。そして、彼らのスコア別に並べられたユーザーのリストを取得します。
現在、私は、MySQLの外に出て働いて、私はそれをORDER_BYことができるように、ユーザーごとに別の鞍部に格納しています。
# returns average for all transactions.
SELECT user_id, AVG(score) FROM transactions WHERE user_id = 1
# returns scores for last 10 transactions.
SELECT user_id, score FROM transactions WHERE user_id = 1 ORDER_BY date DESC LIMIT 10
解決
使用します。
SELECT x.user_id,
AVG(x.score)
FROM (SELECT t.user_id,
t.score
FROM TRANSACTIONS t
WHERE t.user_id = ?
ORDER BY t.date
LIMIT 10) x
GROUP BY x.user_id
他のヒント
ただ、すでに使用中の2つのクエリを結合します:
SELECT user_id, AVG(score)
FROM transactions
WHERE rowid in (
SELECT rowid
FROM transactions
WHERE user_id = 1
ORDER_BY date DESC
LIMIT 10)
rowid
が何らかの識別内径でありますである。
所属していません StackOverflow