【问题标题】:Mysql : Get most recent value for specific users [duplicate]Mysql:获取特定用户的最新值[重复]
【发布时间】:2020-04-18 14:12:10
【问题描述】:
我有一个包含三列的表:lastUpdate、userId 和 userScore
我想过滤它以仅获取 3 个 userId 的最新 userScore,并按 userScore 排序。
到目前为止我试过了:
SELECT *
FROM `mybase`
WHERE `userId`="120683"
OR `userId`="206116"
OR `userId`="259903"
GROUP BY userId
ORDER BY userScore DESC
但它没有给我最新的条目。
你能帮帮我吗?
谢谢
【问题讨论】:
标签:
mysql
sql
sql-order-by
greatest-n-per-group
【解决方案1】:
您需要过滤而不是聚合。
考虑:
SELECT b.*
FROM mybase b
WHERE
userId IN (120683, 206116, 259903)
AND b.lastUpdate = (
SELECT MAX(b1.lastUpdate) FROM mybase b1 where b1.userId = b.userId
)
ORDER BY b.userScore DESC
相关子查询允许您根据userId 过滤最新的lastUpdate。
如果您运行的是 MySQL 8.0,您还可以为此使用窗口函数:
SELECT *
FROM (
SELECT b.*, ROW_NUMBER() OVER(PARTITION BY userId ORDER BY lastUpdate DESC) rn
FROM mybase b
WHERE userId IN (120683, 206116, 259903)
) t
ORDER BY userScore DESC