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