SQL:按时间对GROUP进行排序并限制结果

时间:2012-04-13 23:33:03

标签: mysql sql phpmyadmin

我的表格结构如下:

Name    Time

Joe     2012-02-22 22:11:26.0
Joe     2012-02-22 21:01:23.0
Sue     2012-02-22 20:57:10.0
john    2012-02-22 18:13:36.0
Fred    2012-02-22 16:56:57.0
Joe     2012-02-22 14:38:45.0
Joe     2012-02-22 14:38:45.0
Ralph   2012-02-22 14:26:20.0
...     ...
(more Names and Times)
...     ...
john    2010-03-10 15:27:39.0
john    2010-03-10 15:46:59.0

我正在寻找按时间排序的前三名。结果将是:

Joe, Sue, john

我开始时的查询如下:

SELECT Name FROM table ORDER BY LOWER(TIME) DESC

所以我想用以下结果限制结果:

SELECT Name FROM table ORDER BY LOWER(TIME) DESC LIMIT 0 , 3

但结果显示前三行是预期的:

Joe, Joe, Sue

现在我首先尝试按名称对查询进行分组:

SELECT Name FROM table GROUP BY Name ORDER BY LOWER(TIME) DESC LIMIT 0 , 3

是的,这给了我3个不同的名字,但是不可复制的顺序。 我在这里错过了什么吗?这里的语法是什么?

1 个答案:

答案 0 :(得分:2)

SELECT DISTINCT Name
FROM table
ORDER BY Time DESC
LIMIT 3

基本上,你只需要在第二个查询中添加DISTINCT - 这就告诉MySQL只选择唯一值。没有必要进行分组。 UPD :这是错误的,因为在ORDER BY之后会应用DISTINCT,因为在大多数情况下DISTINCT会使用GROUP BY

P.S。我不明白为什么你使用LOWER。此函数使字符串成为小写。但是你没有操作字符串,因为第二列的类型是DATETIME(我假设)?

UPD:你应该使用分组,这是一个例子:

SELECT Name
FROM table
GROUP BY Name
ORDER BY MAX(Time) DESC
LIMIT 3

重要的是从每个组中获取最大日期/时间并按顺序排序。

相关问题