【发布时间】:2013-06-18 18:26:12
【问题描述】:
SELECT
MAX(timestamp) as end,
MIN(timestamp) as start,
(MAX(odometerKM) - MIN(odometerKM)) as distanceTravelled,
( SELECT COUNT(*) FROM EventData WHERE speedKPH = 0 AND timestamp >= ? AND timestamp <= ? AND deviceID = ?) as stopsDuration,
( SELECT COUNT(*) FROM EventData WHERE speedKPH != 0 AND timestamp >= ? AND timestamp <= ? AND deviceID = ? ) as tripDuration,
(MAX(odometerKM) - MIN(odometerKM)) / ( SELECT fuelEconomy FROM Device WHERE deviceID = ?) as fuelConsumption
FROM EventData
WHERE deviceID = ? AND timestamp >= ? AND timestamp <= ?
相当混乱,但我创建了这个查询来查找一组行的摘要。最小和最大时间戳很简单,但要找到速度为零而不是零的行数,我做了一个丑陋的 hack。我确定有更好的方法来做到这一点?
更新:“?”指代被 CodeIgniter 的一个不成熟的查询生成器所取代。遗憾的是,它还不支持命名参数。
【问题讨论】:
-
您没有忘记在前两个子查询中包含条件
WHERE deviceID = ?吗? -
@Yak:是的。让我编辑。
-
另外,看起来相同的两个子查询实际上计算的是 number 个事件 (
COUNT()) 而不是持续时间?
标签: mysql optimization query-optimization