각로우별 한시간동안의평균 데이터구하기 쿼리 질문드려요.. 0 2 775

by 마이닝 [MySQL] [2019.03.05 14:19:09]


이미지 12.png (16,304Bytes)

안녕하세요.. 쿼리짜다가 방법이 떠오르지않아 질문드려봅니다.
아래와 같은 쿼리를 써서 각 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각각에 적용하려면 어떤식으로 쿼리를 넣어야할지 감이오지않습니다..

도와주세요 ㅠㅠ

 

by 마농 [2019.03.05 15:27:26]

샘플 자료엔 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
;

 


by 마이닝 [2019.03.05 15:40:22]

실제데이터에 null값이 많이들어가게 되서 넣게되었어요 ㅎㅎ

마농님 감사해요.. 아후.. 진짜 많이 늘 고맙습니다

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입