안녕하세요.. 쿼리짜다가 방법이 떠오르지않아 질문드려봅니다. 아래와 같은 쿼리를 써서 각 sid 별로 mnfval 를 구하는게 목표입니다. SELECT rtime, site, sid, mid, intsfrate, CASE WHEN (site = a.site AND sid = a.sid AND mid = a.mid) THEN COALESCE(ROUND(intsfrate,5),0.00000) ELSE 0 END AS mnfval FROM sf_flow_data a WHERE a.rdate = '20190305' AND site = '3023010121'
mnfval 는 현재 intsfrate 부터 1시간뒤 intsfrate 값까지 전체의 평균인데요.. AVG 사용..
COALESCE(ROUND(AVG(intsfrate),5),0.00000) date_format(rtime,'%Y-%m-%d %H:%i:%s') BETWEEN date_format('', '%Y-%m-%d %H:%i:%s') AND date_format(date_add('', interval +1 hour), '%Y-%m-%d %H:%i:%s')
대략 생각한게 위와 같은 쿼리로 이용하면 될것같긴한데.. sid각각에 적용하려면 어떤식으로 쿼리를 넣어야할지 감이오지않습니다..
도와주세요 ㅠㅠ
샘플 자료엔 null 이 안보이는데? COALESCE 가 필요한지 의문이네요?
SELECT a.rtime , a.site , a.sid , a.mid , a.intsfrate -- , ROUND(AVG(COALESCE(b.intsfrate, 0)), 5) AS mnfval , ROUND(AVG(b.intsfrate), 5) AS mnfval FROM sf_flow_data a , sf_flow_data b WHERE a.rdate = '20190305' AND a.site = '3023010121' AND b.site = a.site AND b.sid = a.sid AND b.mid = a.mid AND b.rtime BETWEEN a.rtime AND a.rtime + INTERVAL 1 HOUR GROUP BY a.rtime , a.site , a.sid , a.mid , a.intsfrate ;