我有两张桌子
表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 ;
这需要花费很多时间,因为传感器值表用每分钟数据更新并且是巨大的。任何机构都可以帮助我或提出建议。谢谢。
答案 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;