在列中选择“记录最小值”,在另一列中选择特定值

时间:2016-03-29 13:42:20

标签: php mysql sql

我有一张这样的表:

username     date       place      time
paolo        1/1/2001   milan      00:10.20
marco        1/1/2001   milan      00:11.40
paolo        1/1/2011   milan      00:12.20
paolo        1/1/2004   milan      00:10.50

我想返回用户名paolo的最短时间值的行:

paolo        1/1/2001   milan      00:10.20

我正在尝试使用此查询:

SELECT username,date,place,MIN(time) as record
FROM crono
WHERE username="paolo"
GROUP BY username,date,place

但它没有给出我想要的结果。

2 个答案:

答案 0 :(得分:1)

使用order bylimit

SELECT c.*
FROM crono c
WHERE username = 'paolo'
ORDER BY time
LIMIT 1;

使用GROUP BY时,永远不会让SELECT中的列不是聚合函数的参数且不在GROUP BY中 - 除非你真的,真的,真的知道你在做什么。虽然这不适用于您的查询,但这是解决方案的常见尝试。 ÿ

答案 1 :(得分:0)

可以使用Derived table来计算MIN(time),然后根据SELECT的结果计算Derived table

SELECT username, date, place, record
FROM
(SELECT username, MIN(time) AS record
 FROM crono c
 GROUP BY username) recordselect
INNER JOIN crono c on recordselect.username= c.username