2012-01-24 88 views
1

所以我有一个计算服务器的数量与以小时为单位给出的使用水平,因为这样的MySQL数据库:在24小时内查找最大值

Date    Status Population 
2012-01-13 15:33:40 UP  Standard 
2012-01-13 15:33:40 UP  Light 
2012-01-13 15:33:40 UP  Heavy 
2012-01-13 15:33:40 UP  Light 

2012-01-13 16:33:40 UP  Light 
2012-01-13 16:33:40 UP  Very Heavy 
2012-01-13 16:33:40 UP  Light 

和一个查询,通过分组分给使用水平计算服务器的数量,正是如此

SELECT DATE, ROUND(UNIX_TIMESTAMP(DATE)/(1*60)) AS TIME, COUNT(IF(POPULATION = "Light", 1, NULL)) AS LightCount, COUNT(IF(POPULATION = "Standard", 1, NULL)) AS StandardCount, COUNT(IF(POPULATION = "Heavy", 1, NULL)) AS HeavyCount, COUNT(IF(POPULATION = "Very Heavy", 1, NULL)) AS VeryHeavyCount, COUNT(IF(POPULATION = "Full", 1, NULL)) AS FullCount, COUNT(IF(POPULATION = "Offline", 1, NULL)) AS OfflineCount 
FROM `Servers` 
GROUP BY TIME 
ORDER BY DATE ASC 

输出看起来像:

DATE   TIME   LightCount StandardCount 
2012-01-13 15:33:40 22108174 16   146  
2012-01-13 16:33:35 22108180 16   147 

等,每小时运行计数。

我试图找到一种方法来确定每个24小时内“LightCount”或“StandardCount”等的最高数量。换句话说,LightCount在任何一天的最高小时数是多少?

这是可能的吗?它会需要某种嵌套查询吗?

非常感谢您的帮助。

回答

2

首先要找到最高的,你可以使用GROUP BY DATE(日期),HOUR(日期)每小时金额:

SELECT `DATE`, COUNT(...), ... -- HOUR(`DATE`) if you wanted to see it 
FROM `Servers` 
GROUP BY DATE(`DATE`),HOUR(`DATE`) 
ORDER BY `DATE` ASC 

然后做每最大小时数一天,你会做

SELECT DATE(`DATE`) as Day, MAX(LightCount) as MaxHourlyLightCount, ... 
FROM (
    SELECT `DATE`, .... 
    FROM `Servers` 
    GROUP BY DATE(`DATE`),HOUR(`DATE`) 
    ORDER BY `DATE` ASC 
    ) HourlyCounts 
GROUP BY Day 

Here's链接到MySQL的日期/时间功能 - 你可以做月度统计与GROUP BY MONTH(``Date``), YEAR(``Date``),与GROUP BY YEAR(``Date``)等每年统计 - 非常便利。 (注意:用单反引号代替上面的那些双反引号 - 我不知道如何在stackoverflow中正确地转义它们)。

+0

你真棒。 –

0

它看起来像你已经解释了如何自己做的很多。想象一下,在你的输出'表'上写一个新的查询。所以,你需要有查询的子查询中使用MAX