php - 选择最高的最后一行

标签 php mysql sql

我想选择每个成员最高的最后一行。

ID     UID      POINT        DATE           TIME

1       1         5       2012-11-29      11:29:03    
2       2        10       2012-11-29      11:38:12    
3       1        10       2012-12-02      05:15:01    
4       3         5       2012-12-02      09:51:34    
5       2         5       2012-12-02      12:14:14    
6       3         5       2012-12-04      12:18:30
7       1         5       2012-12-05      06:00:51

所以我想选择每个用户最高点的ID,UID和POINT。 结果应该是:

ID     UID      POINT        DATE           TIME

2       2        10       2012-11-29      11:38:12    
3       1        10       2012-12-02      05:15:01      
6       3         5       2012-12-04      12:18:30

我试过这个:

SELECT distinct uid, point, id FROM `test` 
GROUP By uid ORDER BY date DESC, time DESC

SELECT id, uid, point FROM `test` 
GROUP BY uid ORDER BY date DESC, time DESC

但是我得到了一些错误的结果:

4(3), 2(2), 1(1)

最佳答案

此查询将为每个用户选择最高分:

select uid, max(`points`)
from members
group by uid

这将选择用户拥有最高分的最大 id:

select uid, max(id)
from members
where (uid, `points`) in (select uid, max(`points`)
                          from members
                          group by uid)
group by uid

这是您需要的最终查询:

select members.*
from members
where (uid, id) in (
  select uid, max(id)
  from members
  where (uid, `points`) in (select uid, max(`points`)
                            from members
                            group by uid)
  group by uid)

显示:

ID  UID  POINT  DATE        TIME
2   2    10     2012-11-29  11:38:12    
3   1    10     2012-12-02  05:15:01      
6   3    5      2012-12-04  12:18:30

这也会给出相同的结果,而且看起来更简单:

SELECT s.*
FROM
  (SELECT members.*
   FROM members
   ORDER BY uid, points desc, id desc) s
GROUP BY uid

我认为它会一直有效,但没有记录在案!

对最后一个查询的一点解释:MySql 允许您通过查询选择组中的非聚合字段。这里我们按 uid 分组但选择所有列:文档说非聚合列的值将是不确定的(它可以是组内的任何值)但是在事实上 MySql 只是返回第一个遇到的值。由于我们在有序子查询上应用非聚合列分组依据,因此第一个遇到的值就是您所需要的。

关于php - 选择最高的最后一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13969014/

相关文章:

php - 出于安全原因,如何覆盖 php 内存?

php - 如果值为 true,则为每个项目添加类

mysql - 如果条件为 true,则按 id 进行连接查询

mysql - 如何为带有 ORDER BY 子句的 SQL 查询选择正确的索引 (MySQL)

mysql - 哪个 MYSQL Join 包含不存在的记录

php - 更改公用文件夹名称后使用 artisan serve

mysql - 选择特定日期的最新版本

mysql - 最多选择 2 行,其中一列具有相同的值

sql - 如何使用 mySQL SELECT IF 语句行来连接另一个表?

php - 如何通过在 PHP 中的同一键中搜索不同数组中的值来找到 和 数组的值