반응형
주식의 흐름(추이)를 파악할 때, 이평선이 유용하게 사용된다. 본 포스팅은 주식 포스팅이 아니기에 이평선에 대한 이야기는 다음으로 미루고... 이 이평선을 query로 구현한다면 어떻게 해야할까?
먼저 데이터는 아주 심플하게 아래와 같은 데이터가 있다고 하자.
CREATE TABLE stock_price(
dt varchar(255)
, stock_id varchar(255)
, price integer
);
--하 눈물의 유니슨 ㅠㅠ 유니슨 주주로 가슴이 먹먹해진다. 아래 데이터는 실제 데이터는 아님.
INSERT INTO stock_price
VALUES
('2014-01-01', 'unison', 3000)
, ('2014-01-02', 'unison', 3010)
, ('2014-01-03', 'unison', 3020)
, ('2014-01-04', 'unison', 3000)
, ('2014-01-05', 'unison', 2980)
, ('2014-01-08', 'unison', 3010)
, ('2014-01-09', 'unison', 3030)
, ('2014-01-10', 'unison', 3060)
, ('2014-01-11', 'unison', 3060)
, ('2014-01-12', 'unison', 3040)
, ('2014-01-15', 'unison', 3090)
, ('2014-01-16', 'unison', 3100)
, ('2014-01-17', 'unison', 3100)
, ('2014-01-18', 'unison', 3120)
, ('2014-01-19', 'unison', 3170)
, ('2014-01-22', 'unison', 3120)
, ('2014-01-23', 'unison', 3190)
, ('2014-01-24', 'unison', 3210)
, ('2014-01-25', 'unison', 3200)
, ('2014-01-26', 'unison', 3220)
, ('2014-01-29', 'unison', 3260)
, ('2014-01-30', 'unison', 3270)
, ('2014-01-31', 'unison', 3290)
, ('2014-02-01', 'unison', 3300)
, ('2014-02-02', 'unison', 3350)
, ('2014-02-03', 'unison', 3400)
;현재 기준으로 7일전의 데이터의 평균을 구해야 하므로, 초기 7일의 데이터는 평균값을 구할 수 없다. 실제 주식 차트에서도 그렇게 표현한다.
SELECT dt --일봉 ,price as 일봉 --7일 이평선 계산하기 , ROUND((CASE WHEN 7 = COUNT(*) OVER (ORDER BY dt ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) THEN AVG(SUM(price)) OVER (ORDER BY dt ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) END), 2) AS 일주이평선 FROM stock_price GROUP BY dt, price ORDER BY dt ;
아래와 같은 결과를 얻을 수 있다.
위 집계표를 차트로 옮겨보면 아래와 같이 주식 차트를 뽑아 볼 수 있다. 아래 차트와 같이 우리 니슨이가 천천히 우상향 했으면 하는 소박한 바램을 가져본다. (일봉은 차트로 어떻게 표현해야할지..)
반응형
'Tech > Database' 카테고리의 다른 글
| SQLServer Login & User 의 이해 (1) | 2018.07.12 |
|---|---|
| 누적 데이터 query (0) | 2018.07.11 |
| PostgreSQL for DBA - 작성중 (0) | 2018.07.10 |
| PostgreSQL - Record to column (0) | 2018.07.08 |
| PostgreSQL - Window function (0) | 2018.07.06 |
댓글