我的表格结构如下:
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个不同的名字,但是不可复制的顺序。 我在这里错过了什么吗?这里的语法是什么?
答案 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
重要的是从每个组中获取最大日期/时间并按顺序排序。