SQL/solvesql Advent of SQL 2024

[SQL] solvesql Advent of SQL 2024 14일차

주댕이 2024. 12. 14. 03:05

# 링크

 

https://solvesql.com/collections/advent-of-sql-2024/

 

solvesql.com

 

https://solvesql.com/problems/moving-average-of-power-consumption/

 

solvesql.com

 

# 풀이

SELECT
  DATETIME(measured_at, '+10 minutes') 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
    • DATETIME(measured_at, '+10 minutes') AS end_at: measured_at 컬럼의 값에 10분을 더한 시각을 구하고, end_at으로 저장한다.
    • ROUND(AVG(zone_quads) OVER (ORDER BY measured_at ROWS BETWEEN 5 PRECEDING AND CURRENT ROW), 2) AS zone_quads: zone_quads의 평균값을 구하고, 데이터를 measured_at을 기준을 오름차순 정렬한 후, 현재 행을 포함하여 이전 5개 행을 대상으로(1시간에 해당하는 범위) 이동 평균을 계산하여 zone_quads로 저장한다.
    • ROUND(AVG(zone_smir) OVER (ORDER BY measured_at ROWS BETWEEN 5 PRECEDING AND CURRENT ROW), 2) AS zone_smir: zone_smir의 평균값을 구하고, 데이터를 measured_at을 기준을 오름차순 정렬한 후, 현재 행을 포함하여 이전 5개 행을 대상으로(1시간에 해당하는 범위) 이동 평균을 계산하여 zone_smir로 저장한다.
    • ROUND(AVG(zone_boussafou) OVER (ORDER BY measured_at ROWS BETWEEN 5 PRECEDING AND CURRENT ROW), 2) AS zone_boussafou: zone_boussafou의 평균값을 구하고, 데이터를 measured_at을 기준을 오름차순 정렬한 후, 현재 행을 포함하여 이전 5개 행을 대상으로(1시간에 해당하는 범위) 이동 평균을 계산하여 zone_boussafou로 저장한다.
  • FROM power_consumptions: power_consumptions 테이블에서 데이터를 가져온다.
  • WHERE measured_at BETWEEN '2017-01-01 00:00:00' AND '2017-02-01 00:00:00': measured_at의 값이 2017-01-01 00:00:00부터 2017-02-01 00:00:00까지의 범위 내에 있는 데이터만 선택한다.
728x90