【问题标题】: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
    

    【讨论】:

      猜你喜欢
      • 2014-05-03
      • 2023-01-21
      • 1970-01-01
      • 1970-01-01
      • 2011-05-08
      • 1970-01-01
      • 1970-01-01
      • 2014-11-01
      • 1970-01-01
      相关资源
      最近更新 更多