๋ฌธ์
https://solvesql.com/problems/moving-average-of-power-consumption/
https://solvesql.com/problems/moving-average-of-power-consumption/
solvesql.com
์ฝ๋
SELECT
datetime(measured_at, '+10 minutes') end_at, -- SQLite์์ ์๊ฐ ๋ํ๋ ํจ์
round(avg(zone_quads) OVER (ORDER BY measured_at ROWS BETWEEN 5 PRECEDING AND CURRENT ROW), 2) zone_quads,
round(avg(zone_smir) OVER (ORDER BY measured_at ROWS BETWEEN 5 PRECEDING AND CURRENT ROW), 2) zone_smir,
round(avg(zone_boussafou) OVER (ORDER BY measured_at ROWS BETWEEN 5 PRECEDING AND CURRENT ROW), 2) zone_boussafou
FROM power_consumptions
WHERE measured_at BETWEEN '2017-01-01 00:00:00' AND '2017-02-01 00:00:00'
ํ์ด
1. window ํจ์ ๋ฒ์ ์ง์ ํด์ ์ด๋ํ๊ท ๊ตฌํ๊ธฐ
measured_at์ 10๋ถ ๋จ์์ด๋ค. ๋ฐ๋ผ์, 1์๊ฐ ์ด๋ํ๊ท ์ ๊ตฌํ๊ธฐ ์ํด ์ด์ 5๊ฐ์ ํ๋ถํฐ ํ์ฌ ํ๊น์ง์ ํ๊ท ์ ๊ตฌํ๋ฉด ๋๋ค.
end_at (์ด๋ ํ๊ท ๋ฒ์์ ๋ ์๊ฐ)์ ์ฒซ ํ์ด '2017-01-01 00:10:00' ์ด๊ธฐ ๋๋ฌธ์ ํ์ฌ ํ์์ following (๋ค์ ํ)์ ํ๊ท ์ด ์๋ preceding (์ด์ ํ)์ ์ฌ์ฉํด์ผ ํจ์ ์ ์ ์๋ค. ์ด ๋ถ๋ถ์ด ๊ฝค๋ ํท๊ฐ๋ ธ๋ค.
๋ range between์ ์ฌ์ฉํด๋ดค๋๋ฐ ๊ฒฐ๊ณผ๊ฐ์ด ๋ฌ๋๋ค. ์ฌ์ค rows ์ range์ ์ฐจ์ด๋ฅผ ์ดํดํ์ง ๋ชปํ๊ณ ์์๋๋ฐ
์ด์ ๋น๋ก์ ์ดํดํ๋ค. ์๋์ ์ค๋ช ์ ์ถ๊ฐํ๊ฒ ๋ค
2. measured_at ๋ ์ง ๋ฒ์ ์ง์ ํ๊ธฐ
end_at(measured_at + 10๋ถ) ์ ๋ง์ง๋ง ํ์ด '2017-02-01 00:00:00'์ด๊ธฐ ๋๋ฌธ์
where์ ์์ measured_at์ ๋ ์ง ๋ฒ์์ ๋์ '2017-01-31 23:50:00'์ผ๋ก ์ค์ ํด์ผ ํ๋ ๊ฒ ์๋๊ฐ? ์๊ฐํ๋๋ฐ ์๋์๋ค
์ด์ํ๊ฒ '2017-02-01 00:00:00'์ผ๋ก ์ค์ ํด์ผ์ง '2017-01-31 23:50:00'๊น์ง ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค...
between์ ์ ๋ ๊ฐ์ ํฌํจํ๋ ์กฐ๊ฑด์ผ๋ก ์๊ณ ์๋๋ฐ ์ ์์์ฒ๋ผ ํด์ผํ๋์ง ์์ง ์๋ฌธ์ด๋ค ...
3. measured_at์ ์๊ฐ ๋ํ๊ธฐ
์๊ฐ์ ๋ํ๋ ํจ์๋ก dateadd์ ์ฌ์ฉํด์ dateadd(minute, 10, measured_at)์ ์ ์์ง๋ง ๊ฒฐ๊ณผ๋ ์ค๋ฅ
SQLite๋ datetime(measured_at, '+10 minutes') ์ด๋ฐ ์์ผ๋ก ์๊ฐ์ ๋ํด์ค๋ค.
๐ก Rows ์ Range์ ์ฐจ์ด
Rows
- ํ (Row) ๋จ์๋ก ๊ณ์ฐ
- ํ์ฌ ํ์ ๊ธฐ์ค์ผ๋ก ์ด์ 5ํ๋ถํฐ ํ์ฌํ๊น์ง ํฌํจํ์ฌ ํ๊ท ์ ๊ณ์ฐ
Range
- ๊ฐ (Value) ๋ฒ์ ๊ธฐ๋ฐ์ผ๋ก ๊ณ์ฐ
- ORDER BY measured_at ๊ธฐ์ค์์ ํ์ฌ ํ์ measured_at ๊ฐ์์ 5์ด ์ด์ ๊น์ง์ ๊ฐ๋ค์ ํฌํจํ์ฌ ํ๊ท ์ ๊ณ์ฐ
- measured_at์ ๋์ผํ ๊ฐ์ ๊ฐ์ง ํ์ด ์์ผ๋ฉด ํ ํ์ผ๋ก ์ทจ๊ธ
Range์ ์ฌ์ฉํด์ ์ด ๋ฌธ์ ๋ฅผ ํ๋ ค๋ฉด
RANGE BETWEEN INTERVAL '50 minutes' PRECEDING AND CURRENT ROW
์ด๋ ๊ฒ measured_at ๊ฐ์ ๋จ์(์ฌ๊ธฐ์๋ ์๊ฐ ๋จ์)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฒ์๋ฅผ ๊ณ์ฐํด์ผ ํ๋ค.
๋๋ ์
window ํจ์ ๋ฒ์ ์ง์ ํ๋ ๋ฌธ๋ฒ์ ๋ ์ต์ํด์ ธ์ผ๊ฒ ๋ค
์ฐธ๊ณ
[Oracle] ROWS์ RANGE ์ฐจ์ด ๋ฐ ์ฌ์ฉ๋ฒ (WINDOWING ์ )
์ค๋ผํด์์ OVER ์ ์ WINDOWING ์ ์ ์ฒ์ ์ฌ์ฉํ ๋ ROWS์ RANGE๊ฐ ์ด๋ค ์ฐจ์ด์ ์ด ์๋์ง ๋ง์ด ํท๊ฐ๋ฆด ์ ์๋ค. ๊ฐ๋จํ ์ค๋ช ํ๋ฉด ROWS๋ ๊ฐ ํ์ ์์น๊ณ , RANGE๋ ๊ฐ์ ๋ฒ์๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. ์๋์
gent.tistory.com
์ด ๋ธ๋ก๊ทธ๊ฐ rows์ range์ ์ฐจ์ด๋ฅผ ์ง๊ด์ ์ผ๋ก ์ ์ดํด๋๊ฒ ์ค๋ช ํด๋จ๋ค ! ์ฐธ๊ณ ๋ฐ๋ !

'Tools > - SQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [SQL] solvesql | ์ ๋(Flow)์ ์ ๋(Stock) | strftime๋ก ๋ ์ง ์ถ์ถํ๊ธฐ | SQLite (0) | 2025.02.09 |
|---|---|
| [SQL] solvesql | ๊ฒ์ ๊ฐ๋ฐ์ฌ์ ์ฃผ๋ ฅ ํ๋ซํผ ์ฐพ๊ธฐ (0) | 2025.02.09 |
| [SQL] solvesql | ์คํ ๋์ ๋ฌ ์๊ฐ ์ฐพ๊ธฐ (0) | 2025.02.09 |
| [SQL] leetcode | 1393. Capital Gain/Loss ์์ ํ์ด (0) | 2025.02.01 |
| [SQL] leetcode | 1045. Customers Who Bought All Products (0) | 2025.02.01 |