MySQL:选择一个月份的数据分成时段

时间:2015-01-19 14:07:27

标签: php mysql database

我有两张桌子

表1.时间段

CREATE TABLE `timeslots` (
   `Id` int(11) NOT NULL AUTO_INCREMENT,
   `TodName` varchar(50) DEFAULT NULL,
   `StartTime` time DEFAULT NULL,
   `EndTime` time DEFAULT NULL,
   `SiteId` int(11) DEFAULT NULL,
   PRIMARY KEY (`Id`)
) 

表2.传感器值

CREATE TABLE `sensorvalues` (
   `SiteID` int(11) NOT NULL DEFAULT '0',
   `MeterID` int(11) NOT NULL DEFAULT '0',
   `Time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
   `SensorValue` double DEFAULT NULL,
    PRIMARY KEY (`MeterID`,`Time`)
)

我必须得到最大传感器值减去按时间段分组的每月最小传感器值。那就是每天的时间分为三个时段。 1.高峰时段(早上6点至下午6点)2。正常时间(下午6点至晚上11点)和3.非高峰时段(晚上11点至早上6点)。我需要每个月分别获得这些时间段的传感器值。

我目前正在做的是分别找到每天的传感器值并将其添加为

select Max(sv.SensorValue)-min(sv.SensorValue) 
FROM sensorvalues sv 
Where sv.`Time` between '2014-01-01 06:00:00' and  '2014-01-01 17:59:59' and MeterID = 1 ; 

这需要花费很多时间,因为传感器值表用每分钟数据更新并且是巨大的。任何机构都可以帮助我或提出建议。谢谢。

1 个答案:

答案 0 :(得分:1)

也许在一个查询中执行此操作会有所帮助。如果您只想按月份使用汇总值,请执行以下操作:

SELECT (case when time(time) between '06:00:00' and '17:59:59' then 'peak'
             when time(time) between '18:00:00' and '22:59:59' then 'normal'
             else 'offpeak'
        end) as timegroup,
       Max(sv.SensorValue) - min(sv.SensorValue) 
FROM sensorvalues sv 
WHERE sv.`Time` BETWEEN '2014-01-01 00:00:00' AND '2014-01-31 23:59:59' AND MeterID = 1
GROUP BY timegroup;