现在我有以下数据:
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时可以采用最新的日期而不是最旧的日期,但我猜我必须计算出除分组之外的其他日期。
编辑:以下作品。但是我想从子查询中返回更多列,我该怎么做?
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
答案 0 :(得分:5)
使用子查询返回每天的最长时间:
SELECT MAX(Time) AS Time
FROM Media
WHERE Place_ID = 1
GROUP BY CAST(Time AS DATE)
然后将其加入您的媒体表,将结果限制为每天一个:
SELECT Type AS Name,
DATE_FORMAT(DATE(DATE_SUB(Media.time, INTERVAL 4 HOUR)), GET_FORMAT(DATE, 'ISO')) AS Time,
uri,
media_id,
description
FROM Media
INNER JOIN
( SELECT MAX(Time) AS Time
FROM Media
WHERE Place_ID = 1
GROUP BY CAST(Time AS DATE)
) MaxTime
ON MaxTime.Time = Media.Time;
此解决方案的一个巨大好处是,主体适用于所有DBMS,而目前MySQL是我所知道的唯一一个支持select语句中不属于聚合函数或包含在组中的列的人。声明。我最近写了another answer on SO来描述MySQL中此功能的潜在危害,以及为什么它在其他DMBS中不受支持。
<强> Example on SQLFiddle 强>
答案 1 :(得分:2)
将此“ GROUP BY时间ORDER BY时间DES * C”更改为“ * GROUP BY DATE ORDER BY time DATE ”。它会将数据从新日期缩短为旧日期。
答案 2 :(得分:1)
使用子字符串略微缩小语句,以便在TIME和DATE分别设置ORDER BY。这样的事情应该有效;
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 SUBSTRING(time,1,10) DESC, SUBSTRING(time,12,8) ASC
答案 3 :(得分:1)
试试这个:
SELECT time,DATE_FORMAT(DATE(DATE_SUB(time,INTERVAL 4 HOUR)),
GET_FORMAT(DATE,'ISO')) as date, uri, media_id, description
FROM media WHERE place_id = 1
ORDER BY date DESC ,time desc