시계열 데이터를 바탕으로 조회를 해야되서 예제로 다뤄봄
Time Series Data : 시계열 데이터
대표적으로 환율, 주가, 날씨 등에 쓰임
시간을 기준으로 데이터가 정렬되고
과거 데이터 분석에 용이
timestamp
currency_pair
와 같은 인덱스 설정 할 것CREATE INDEX idx_exchange_rates ON exchange_rates (currency_pair, timestamp DESC);
DELETE FROM exchange_rates WHERE timestamp < NOW() - INTERVAL '1 year';
timestamp
기준으로 파티션을 하면 성능 향상에 도움이 됨 CREATE TABLE exchange_rates_y2024 PARTITION OF exchange_rates
FOR VALUES FROM ('2024-01-01') TO ('2024-12-31');
CREATE TABLE exchange_rates (
timestamp TIMESTAMP PRIMARY KEY,
rate DECIMAL(10, 2) NOT NULL
);
timestamp
→ 기본 키 rate
→ 소수점 2자리까지 저장되는 환율(EX_)USD/KRW) 값 INSERT INTO exchange_rates (timestamp, rate) VALUES
('2024-02-19 12:00:00', 1320.50),
('2024-02-19 12:05:00', 1318.75),
('2024-02-19 12:10:00', 1321.25);
SELECT * FROM exchange_rates ORDER BY timestamp DESC;
결과는 아래와 같음
timestamp | rate
---------------------+--------
2024-02-19 12:10:00 | 1321.25
2024-02-19 12:05:00 | 1318.75
2024-02-19 12:00:00 | 1320.50
[
{
"timestamp": "2024-02-19T12:10:00.000Z",
"rate": 1321.25
},
{
"timestamp": "2024-02-19T12:05:00.000Z",
"rate": 1318.75
},
{
"timestamp": "2024-02-19T12:00:00.000Z",
"rate": 1320.50
}
]
CREATE TABLE exchange_rates (
id SERIAL PRIMARY KEY, // 고유 id
currency_pair VARCHAR(10) NOT NULL, // 통화 쌍
timestamp TIMESTAMP NOT NULL,
rate DECIMAL(10,4) NOT NULL, //소수점 4자리
UNIQUE (currency_pair, timestamp)
);
INSERT INTO exchange_rates (currency_pair, timestamp, rate) VALUES
('USD/KRW', '2024-02-19 12:00:00', 1320.50),
('USD/JPY', '2024-02-19 12:00:00', 150.25),
('USD/EUR', '2024-02-19 12:00:00', 0.9235),
('USD/GBP', '2024-02-19 12:00:00', 0.7852),
('USD/CNY', '2024-02-19 12:00:00', 7.1050);
id | currency_pair | timestamp | rate |
---|---|---|---|
1 | USD/KRW | 2024-02-19 12:00:00 | 1320.50 |
2 | USD/JPY | 2024-02-19 12:00:00 | 150.25 |
3 | USD/EUR | 2024-02-19 12:00:00 | 0.9235 |
4 | USD/GBP | 2024-02-19 12:00:00 | 0.7852 |
5 | USD/CNY | 2024-02-19 12:00:00 | 7.1050 |
SELECT * FROM exchange_rates
WHERE currency_pair = 'USD/KRW'
ORDER BY timestamp DESC
LIMIT 1;
SELECT DISTINCT ON (currency_pair) *
FROM exchange_rates
ORDER BY currency_pair, timestamp DESC;
[
{
"currency_pair": "USD/KRW",
"timestamp": "2024-02-19T12:00:00.000Z",
"rate": 1320.50
},
{
"currency_pair": "USD/JPY",
"timestamp": "2024-02-19T12:00:00.000Z",
"rate": 150.25
},
{
"currency_pair": "USD/EUR",
"timestamp": "2024-02-19T12:00:00.000Z",
"rate": 0.9235
}
]