반응형
주식의 흐름(추이)를 파악할 때, 이평선이 유용하게 사용된다. 본 포스팅은 주식 포스팅이 아니기에 이평선에 대한 이야기는 다음으로 미루고... 이 이평선을 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 |
댓글