【发布时间】:2012-08-07 05:59:44
【问题描述】:
现在我有以下数据:
Name Time
picture 2012-07-23 17:00:00
picture 2012-07-24 18:00:00
picture 2012-07-24 19:00:00
picture 2012-08-03 08:40:06
picture 2012-08-03 08:42:39
picture 2012-08-03 08:54:03
picture 2012-08-03 10:38:58
picture 2012-08-03 10:39:55
picture 2012-08-06 08:12:14
还有以下 SQL 查询:
SELECT DATE_FORMAT(DATE(DATE_SUB(time,INTERVAL 4 HOUR)),GET_FORMAT(DATE,'ISO'))
as time, uri, media_id, description
FROM media WHERE place_id = 1
GROUP BY time ORDER BY time DESC
效果很好,并为我提供了我想要的数据。 但是每个唯一日期的数据按每个“天”中最旧的日期排序。我希望它按最新订购。 Order By 语句只是对整个结果进行排序,而不是每一天的日期。如果 o 在使用 Group By 时可以采用最新的日期而不是最旧的日期,但我想我必须解决除 group by 之外的其他问题。
编辑:以下工作。但是我想从子查询中返回更多的列,我该怎么做?
SELECT Distinct DATE_FORMAT( DATE( DATE_SUB(time, INTERVAL 4 HOUR ) ) ,
GET_FORMAT( DATE, 'ISO' ) ) AS date,
(SELECT type FROM media WHERE
DATE_FORMAT( DATE( DATE_SUB(time, INTERVAL 4 HOUR ) ) ,
GET_FORMAT( DATE,'ISO' ) ) = date Order by time DESC Limit 1) as name
FROM media
【问题讨论】:
-
按时间 DESC 分组?按时间 DESC 排序?
-
问题是Group By不是排序功能。所以它没有区别。我想我需要一个子查询。
-
我的错。 MySQL 文档似乎暗示您可以做到这一点。即,在此页面上:dev.mysql.com/doc/refman/5.0/en/select.html ... 所以如果它不这样做,我会对 ASC|DESC 与 group by 一起使用时的用途感兴趣
-
如果我 SELECT Distinct DATE_FORMAT(DATE(DATE_SUB(time,INTERVAL 4 HOUR)),GET_FORMAT(DATE,'ISO')) as date FROM media WHERE place_id = 1 然后我得到所有日期.也许只需向该查询添加一个子查询,该查询从每个日期的最新信息中获取信息。
标签: mysql sql sql-order-by group-by