01. 내가 보유한 주식 테이블 생성하기
주식 매입 날짜, 수량, 구매가 데이터를 임시 테이블에 저장하기
CREATE TABLE #mystock (
date datetime, --날짜 자료형
symbol nvarchar(255), --문자 자료형
qty int, -- 정수형
price decimal(18,2) --실수형
)
INSERT INTO #mystock VALUES('2019-01-02', 'TSLA', 10, 61.00)
INSERT INTO #mystock VALUES('2019-05-23', 'TSLA', 20, 39.00)
INSERT INTO #mystock VALUES('2019-07-14', 'TSLA', 5, 300.00)
INSERT INTO #mystock VALUES('2019-01-07', 'MSFT', 3, 100.00)
INSERT INTO #mystock VALUES('2019-08-07', 'MSFT', 6, 132.00)
INSERT INTO #mystock VALUES('2019-11-29', 'MSFT', 2, 151.00)
SELECT * FROM #mystock
결과
date symbol qty price
2019-01-02 00:00:00.000 TSLA 10 61.00
2019-05-23 00:00:00.000 TSLA 20 39.00
2019-07-14 00:00:00.000 TSLA 5 300.00
2019-01-07 00:00:00.000 MSFT 3 100.00
2019-08-07 00:00:00.000 MSFT 6 132.00
2019-11-29 00:00:00.000 MSFT 2 151.00
02. 나의 주식 증감액 검색하기
#mystock과 일별 주가 데이터를 조인해 일별 증감액을 검색하기
SELECT
CONVERT(NVARCHAR(10), x.date, 120) AS date,
CONVERT(DECIMAL(18,2), sum(x.benefit)) AS benefit
FROM (
SELECT
b.date,
b.symbol,
(b.[close] -a.price) *qty AS benefit
FROM #mystock AS a
LEFT OUTER JOIN stock AS b ON a.symbol COLLATE Latin1_General_CI_AS = b.symbol
AND a.date <= b.date
) AS x
GROUP BY x.date
ORDER BY x.date
결과
date benefit
2019-01-02 10.24
2019-01-03 -9.28
2019-01-04 25.38
2019-01-07 66.10
2019-01-08 69.10
쿼리에서 LEFT OUTER JOIN 문을 사용했는데, #mystock 테이블을 기준으로 stock 테이블을 조인시켰고, JOIN 조건인 ON 문을 보면 a.date <= b.date로 현재 자신이 구입한 날짜를 포함해 이후 날짜의 데이터와 조인했다. 이유는 자신이 주식을 구입한 날짜로부터 수익에 관한 증감을 구할 수 있기 때문이다. 또한 COLLATE Latin1_General_CI_AS를 사용했는데, 이는 SQL 서버 환경의 데이터 정렬 속성이 Korean_Wansung_CI_AS 속성으로 만들어졌기 때문이다. 따라서 문자열을 조인 조건으로 사용하면 서로 다른 정렬 속성 때문에 비교할 수 없으므로, #mystock의 symbol 열을 COLLATE Latin1_General_CI_AS를 사용해 명시적으로 변경했다.
03. 증감액을 그래프로 보기
엑셀에 붙여넣기 해 차트를 생성한다.
04. 종목별 증감액 검색하기
symbol 별로 증감액을 검색한다
SELECT
x.symbol,
CONVERT(NVARCHAR(10), x.date, 120) AS date,
CONVERT(DECIMAL(18,2), sum(x.benefit)) AS benefit
FROM (
SELECT
b.date,
b.symbol,
(b.[close] -a.price) *qty AS benefit
FROM #mystock AS a
LEFT OUTER JOIN stock AS b ON a.symbol COLLATE Latin1_General_CI_AS = b.symbol
AND a.date <= b.date
) AS x
GROUP BY x.symbol, x.date
ORDER BY x.symbol, x.date
결과
symbol date benefit
MSFT 2019-01-07 6.18
MSFT 2019-01-08 8.40
MSFT 2019-01-09 12.81
MSFT 2019-01-10 10.80
...
TSLA 2019-01-07 59.92
TSLA 2019-01-08 60.70
TSLA 2019-01-09 67.06
TSLA 2019-01-10 79.94
SELECT와 GROUP BY에 symbol을 추가해, symbol을 단위로 일별 증감액을 검색한다.
'IT Story > SQL Story' 카테고리의 다른 글
국가 통계 데이터 분석하기: 행정 구역별 인구 분석하기 (0) | 2022.12.08 |
---|---|
5일, 20일 가격 이동 평균 구하기 (1) | 2022.12.08 |
특정 기간 주가 하락했다가 회복한 종목의 증감률 구하기 (0) | 2022.12.08 |
주가가 연속 상승한 종목 분석하기 (0) | 2022.12.07 |
전일 대비 종목 분석하기 (0) | 2022.12.06 |