2017-06-02 137 views
0

我想弄清楚如何按小时与以下数据集进行排序。Mysql按时间排序(小时)

hm,total_count,avg_count,max_count 
------------------------------------- 
'23:15','17','5.6667','9' 
'23:45','19','3.1667','5' 
'06:15','13','6.5000','9' 
'05:15','22','4.4000','7' 
'05:45','12','6.0000','11' 
'04:15','22','4.4000','6' 
'04:45','14','4.6667','7' 
'03:45','24','2.4000','5' 
'02:45','82','5.4667','13' 
'01:45','98','6.1250','13' 
'00:45','59','4.2143','11' 

我的查询:

SELECT DATE_FORMAT(`dt`, '%H:%i') as hm, SUM(`counts`) AS total_count, 
     AVG(`counts`) AS avg_count, MAX(`counts`) AS max_count 
FROM pax_load_distribution , plans 
WHERE `pax_load_distribution`.`plan_id` = `plans`.`id` AND 
     `plans`.`dt` BETWEEN '2017-05-01' AND '2017-05-31' 
GROUP BY hm 
ORDER BY HOUR(hm) DESC, MINUTE(hm) ASC; 

但正如你所看到的,查询组织之上的23个小时,但不是在一个序列从23,00,01,02等。如何使它使得23小时最接近00,01等。

+0

'dt'是否跨越多天? –

+0

是的,它跨越一个月的时间并收集小时。 –

回答

0

尝试在您的ORDER BY子句中使用HOUR(dt + INTERVAL 1 HOUR)而不是HOUR(hm) DESC

+0

不幸的是,它没有工作:( –

+0

@ShawnAng,对不起。请用'dt'试试。我已经提出了答案。 – Alexander

+0

太棒了!它的工作原理! –

0

您可以尝试:ORDER BY (HUOUR(hm) * 60 + MINUTE(hm)) ASC

+0

首先,我认为你有一个错字在你的HUOUR。这个代码片段可以解决这个问题,[包括解释](https://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)确实有助于提高你的文章的质量。您将来会为读者回答问题,而这些人可能不知道您的代码建议的原因。 –