我有一张这样的桌子:
name date time
tom | 2011-07-04 | 01:09:52
tom | 2011-07-04 | 01:09:52
mad | 2011-07-04 | 02:10:53
mad | 2009-06-03 | 00:01:01我想把最老的名字放在前面:
SELECT *
ORDER BY date ASC, time ASC
GROUP BY name(->不起作用!)
现在,它应该首先给我mad(具有更早的日期),然后是tom
但是对于GROUP BY name ORDER BY date ASC, time ASC,首先给我的是较新的mad,因为它在排序之前进行分组!
再说一次:问题是我不能在分组之前按日期和时间排序,因为分组依据必须在排序依据之前!
发布于 2012-12-17 08:20:13
另一种方法:
SELECT *
FROM (
SELECT * FROM table_name
ORDER BY date ASC, time ASC
) AS sub
GROUP BY nameGROUP BY GROUP在它命中的第一个匹配结果上。如果第一个匹配的命中结果恰好是您想要的,那么一切都应该按预期进行。
我更喜欢这种方法,因为子查询具有逻辑意义,而不是使用其他条件。
发布于 2016-02-04 21:48:27
由于我不被允许对用户1908688的回答发表评论,这里给MariaDB用户一个提示:
SELECT *
FROM (
SELECT *
ORDER BY date ASC, time ASC
LIMIT 18446744073709551615
) AS sub
GROUP BY sub.namehttps://mariadb.com/kb/en/mariadb/why-is-order-by-in-a-from-subquery-ignored/
发布于 2011-07-04 21:39:06
我想这就是你想要的:
SELECT name, min(date)
FROM myTable
GROUP BY name
ORDER BY min(date)目前,您必须通过STR_TO_DATE创建一个mysql日期:
STR_TO_DATE(date + ' ' + time, '%Y-%m-%d %h:%i:%s')所以:
SELECT name, min(STR_TO_DATE(date + ' ' + time, '%Y-%m-%d %h:%i:%s'))
FROM myTable
GROUP BY name
ORDER BY min(STR_TO_DATE(date + ' ' + time, '%Y-%m-%d %h:%i:%s'))https://stackoverflow.com/questions/6572110
复制相似问题