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 <= ?
매우 혼란 스럽지만이 쿼리를 만들어 행 집합 요약을 찾습니다. 최소 및 최대 타임 스탬프는 간단하지만 속도가 0이 아닌 0 인 행을 찾으면 추한 해킹을 수행했습니다. 나는 이것을 할 수있는 더 좋은 방법이 있다고 확신한다.더 나은 방법으로이 SQL 쿼리를 작성하는 좋은 방법은 무엇입니까?
업데이트 : "?" CodeIgniter의 미성숙 쿼리 빌더로 대체 될 것을 참고하십시오. 슬프게도 아직 명명 된 매개 변수를 지원하지 않습니다.
당신의 조건'의 DeviceID ='를 포함하는 것을 잊지 않았다 당신의 처음 두 개의 서브 쿼리? – RandomSeed
@Yak : 예. 내가 편집하게 해줘. – Shubham
또한 동일한 두 하위 쿼리가 기간이 아닌 실제로 이벤트의 숫자 * (COUNT())를 계산하는 것처럼 보입니까? – RandomSeed