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 <= ?
非常令人困惑,但我创建了此查询来查找行集合的摘要。最小和最大时间戳很简单,但要找到速度为零而非零的行的COUNT,我做了一个丑陋的黑客。我相信有更好的方法来做到这一点?以更好的方式写这个SQL查询的好方法是什么?
更新:“?”请参阅由CodeIgniter的一个不成熟的查询生成器替换。可悲的是,它尚不支持命名参数。
你没忘了,包括在条件'WHERE设备ID ='你前两个子查询? – RandomSeed
@Yak:是的。让我编辑。 – Shubham
此外,它看起来像相同的两个子查询实际上计算一个*号*的事件('COUNT()')而不是持续时间? – RandomSeed