sql - Mysql:查询以使用仲裁器查找具有最大值的行

标签 sql mysql

User     Region   Points   Last_Updated        
1        5        0        1-Nov-09        I want this row
2        1        5        30-Oct-09        
3        1        2        02-Nov-09        
2        2        7        02-Nov-09        and this row
3        2        5        02-Nov-09        

使用mysql数据库,我想获取从区域X到区域Y的每个区域的所有积分领先者。如果积分相同,我想使用last_updated作为平局断路器。我找到了一种方法来做到这一点,但它涉及对同一个表进行多个查询并将它们连接在一起。我忍不住认为有更好的解决方案。任何想法。

最佳答案

这应该有效:

SELECT
     T1.User
FROM
     MyUnnamedTable T1
LEFT OUTER JOIN MyUnnamedTable T2 ON
     T2.Region = T1.Region AND
     (
          T2.Points > T1.Points OR
          (T2.Points = T1.Points AND T2.Last_Updated > T1.Last_Updated)
     )
WHERE
     T2.User IS NULL AND
     T1.Region BETWEEN x AND y

您基本上是在说,“给我所有在同一地区没有其他用户且拥有更多积分或具有稍后更新日期的相同积分的用户。”

关于sql - Mysql:查询以使用仲裁器查找具有最大值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1703244/

相关文章:

mysql - 精确时间之间的查询

mysql - 3 个连接的 mysql 表的最新记录

SQL多行合二为一

mysql - 对列的唯一组合进行 PK 或添加数字 rowID

php - 如果我需要为其他表获取主 ID,如何插入

c# - 是否可以使用 XML 查询命令转储 MySQL 数据库?

php - 如何从 PHP 中的图像变量加载 blob

mysql - 如何使用 case when 语句获得正确的输出?

database - VIEW 与 SQL 语句的性能

sql - 聚合函数或 GROUP BY 子句