누적값을 가지고 시계열 통계 쿼리 처리 0 2 1,071

by kjp [SQL Query] mysql 누적통계 [2020.06.15 16:46:46]


이곳 질문에 달린 답변들을 보면서
이런 것도 한방에 가능하구나 하며 항상 놀라는 DB 초보입니다. ^^

MySQL에서 IoT기기의 Data를 수집해서, 한시간/하루/한달 단위의 통계를 내는데,

예를 들어 raw data가 1분 주기로 report되고, 1분간의 interval data 값이 들어온다고 하면
시간단위로 group by해서 sum을 하면 통계를 낼 수 있었는데,

raw data가 1분 주기로 계속 누적되는 값으로 들어오는 경우에는 어떻게 쿼리를 작성해야할지 어렵네요.

가령 전기계량기 같으면 (1분 동안 사용한 값 vs 계속 누적되는 Total 값)의 상황입니다.

한시간/하루/한달 단위의 통계를 내려면,
누적값의 경우 이전 값을 빼줘야 실제 사용량이 나오게 되는데,
쿼리로 어떻게 해야할지 도통 떠오르지 않네요.

 

by 마농 [2020.06.15 16:57:34]
-- 예) 2020-01 ~ 2020-05 월별 통계 --
SELECT ym
     , v1          -- 현월누적
     , v2          -- 전월누적
     , v1 - v2 v3  -- 현월실적
  FROM (SELECT DATE_FORMAT(reg_dt, '%Y-%m') ym
             , MAX(v)                                                  v1  -- 현월누적
             , LAG(MAX(v)) OVER(ORDER BY DATE_FORMAT(reg_dt, '%Y-%m')) v2  -- 전월누적
          FROM log
         WHERE reg_dt >= '2019-12-01'    -- 1개월전 자료까지 검색 필요함.
           AND reg_dt <  '2020-06-01'
         GROUP BY DATE_FORMAT(reg_dt, '%Y-%m')
        ) a
 WHERE ym >= '2020-01'
;

 


by kjp [2020.06.15 19:03:30]

감사합니다~!

특정 시간 단위에서 해당 구간의 가장 마지막 Data를 어떻게 구해야하나 했는데,
누적값의 특성상 MAX값이 가장 마지막 Data가 되겠네요. 관점을 바꿔서 보니 이런 해결책이. ^^

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