SQL

[4] 전력 소비량 이동 평균 구하기

sooyeoon 2025. 4. 15. 16:02

Advent of SQL 2024  > 전력 소비량 이동 평균 구하기

2017년 1월 1일 0시부터 2017년 2월 1일 0시까지 10분 단위로 3개 발전소 전력 소비량의 1시간 범위 단순 이동 평균을 계산하는 쿼리를 작성해주세요. 평균을 내기 위한 데이터의 범위가 1시간보다 작은 경우 해당 범위에 포함되는 측정 값만 평균 계산에 포함시켜주세요. 쿼리 결과에는 아래 컬럼이 포함되어 있어야 하고, 이동 평균 값은 소수점 셋째 자리에서 반올림 해 둘째 자리까지 표시되어야 합니다.

 

 

-- 2017년 1월 1일 0시부터 2017년 2월 1일 0시까지
-- 10분 단위
-- 3개 발전소 
-- 전력 소비량의 1시간 범위 단순 이동 평균
-- 평균을 내기 위한 데이터의 범위가 1시간보다 작은 경우 
-- 해당 범위에 포함되는 측정 값만 평균 계산에 포함
-- 이동 평균 값은 소수점 셋째 자리에서 반올림 해 둘째 자리까지 표시

WITH base AS (
  SELECT
    LEAD(measured_at) OVER(ORDER BY measured_at) AS end_at,
    ROUND(AVG(zone_quads) OVER(ORDER BY measured_at ROWS BETWEEN 5 PRECEDING AND CURRENT ROW), 2) AS zone_quads,
    ROUND(AVG(zone_smir) OVER(ORDER BY measured_at ROWS BETWEEN 5 PRECEDING AND CURRENT ROW), 2) AS zone_smir,
    ROUND(AVG(zone_boussafou) OVER(ORDER BY measured_at ROWS BETWEEN 5 PRECEDING AND CURRENT ROW), 2) AS zone_boussafou
  FROM power_consumptions
  WHERE measured_at BETWEEN '2017-01-01 00:00:00' AND '2017-02-01 00:00:00'
)
SELECT *
FROM base
WHERE end_at IS NOT NULL
ORDER BY end_at

LEAD 밀고 NULL 값 제외 까묵지않기