Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 选择最高的最后一行_Php_Mysql_Sql - Fatal编程技术网

Php 选择最高的最后一行

Php 选择最高的最后一行,php,mysql,sql,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

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

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和每个用户中最高的点。 结果应该是:

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

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

4(3), 2(2), 1(1)
试试这个:

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


这是正确的:

SELECT ID, UID, MAX(POINT) FROM `test` GROUP BY UID ORDER BY DATE DESC, TIME DESC

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

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只返回遇到的第一个值。由于我们在一个有序子查询上应用了带有未聚合列的group by,因此遇到的第一个值就是您需要的值。

  • :从第一个答案更新以匹配预期结果
查询:

SELECT x.*
FROM (SELECT p.*
FROM points p
ORDER BY uid, point desc, id desc) as x
GROUP BY x.uid
;
结果:

ID  UID     POINT   DATE                                TIME
3   1       10      December, 02 2012 00:00:00+0000     January, 01 1970 05:15:01+0000
2   2       10      November, 29 2012 00:00:00+0000     January, 01 1970 11:38:12+0000
6   3       5       December, 04 2012 00:00:00+0000     January, 01 1970 12:18:30+0000
查询:

SELECT x.*
FROM (SELECT p.*
FROM points p
ORDER BY uid, point desc, id desc) as x
GROUP BY x.uid
;

SELECT t1.*
FROM Table1 t1 
WHERE t1.ID = (SELECT MAX(t3.ID)
               FROM Table1 t3
               WHERE t1.UID=t3.UID
               AND t3.POINT=(SELECT  MAX(t2.POINT)
                               FROM Table1 t2
                               WHERE t2.UID = t3.UID))
结果:

| ID | UID | POINT |                            DATE |     TIME |
-----------------------------------------------------------------
|  2 |   2 |    10 | November, 29 2012 00:00:00+0000 | 11:38:12 |
|  3 |   1 |    10 | December, 02 2012 00:00:00+0000 | 05:15:01 |
|  6 |   3 |     5 | December, 04 2012 00:00:00+0000 | 12:18:30 |
就这么简单:

SELECT * FROM (SELECT * FROM `points` ORDER BY point DESC) AS `t1` GROUP BY uid;
从测试中选择最大值(点)、id、uid 按uid分组 按点顺序描述


以这种方式使用,它将解决您的问题。

您能在适当的列ID中显示您的预期结果吗?是不是最高的
后面紧跟着
max()
?我编辑了开场白(添加:结果应该是:…),所以你需要你的数据来考虑日期、时间?我不想打印日期和时间,但如果是某个点(例如:ID 4和6),你喜欢日期的顺序吗?我只得到1行(但我有3个用户,所以应该是3行):id/uid/MAX(point):4/3/5(添加:结果应该是:…我的开场白中的格式类型)或将lmit更改为3也是错误的结果)在我的帖子中尝试了查询并成功。我将日期和时间列合并到时间戳列中。从
test
GROUP BY uid ORDER BY date DESCmysql>中选择id、uid、MAX(point)从
test
GROUP BY uid ORDER BY date DESC中选择id、uid、MAX(point);结果=id 4,uid 3,最大(点)5;id 2,uid 2,最大(点)10;id 1,uid 1,MAX(point)10我再试了一次,但是当uid为3时,我得到的不是最新的一行(id 4和6中的点相同,但我得到的是id 4,但最新插入的行是6I得到错误的结果,当uid为3时,id将是4而不是6,当uid为3时,id应该是6,因为最新插入的行是6(point是相同的)@Gery刚刚没有收到你的最新预期结果。你与fthiela和justin相处得更好。问题是+1。在几个名字改变后似乎还可以。我喜欢简单,但它太简单了,无法工作,但看起来可以工作:)谢谢you@Gery我编辑了一点我的答案,来解释为什么最后一个查询没有记录,为什么我相信它会一直有效!相同:如果UID是3,ID应该是6,因为最新插入的行是6(点是相同的)
orderbyUID,points desc,ID desc
就像在我的答案中那样更好:)它会起作用,我经常使用这个技巧,即使它没有被记录是的,我也是,但最近没有做任何SQL。
SELECT * FROM (SELECT * FROM `points` ORDER BY point DESC) AS `t1` GROUP BY uid;