teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

調整

2019/07/05 07:40

投稿

yambejp
yambejp

スコア117944

answer CHANGED
@@ -1,2 +1,45 @@
1
1
  ago_closeって前日の終値じゃないんですか?
2
- 前日のtoday_closeと当日のago_closeの値があっていません
2
+ 前日のtoday_closeと当日のago_closeの値があっていません
3
+
4
+ # function
5
+ 任意の日付のn日前を拾うfunctionを作ってみました
6
+ 以下一度だけ実行してください
7
+ ```SQL
8
+ drop function if exists prev_date;
9
+ delimiter //
10
+ create function prev_date(d datetime,i int) RETURNS datetime DETERMINISTIC
11
+ begin
12
+ set @a=null,@b=null;
13
+ select (select count(*)+1 from (select distinct Date from table1) as t1 where t1.Date>t2.Date) into @a
14
+ from (select distinct Date from table1) as t2
15
+ where Date=d;
16
+ select Date into @b
17
+ from (select distinct Date from table1) as t3
18
+ having (select count(*)+1 from (select distinct Date from table1) as t4 where t4.Date>t3.Date)=@a+i;
19
+ return @b;
20
+ end
21
+ //
22
+ delimiter ;
23
+ ```
24
+ - テスト
25
+ ```SQL
26
+ select SC,
27
+ Date,
28
+ prev_date(Date,1),
29
+ prev_date(Date,2)
30
+ from table1
31
+ ```
32
+ - functionを利用して1日前、2日前のtodays_closeを拾う
33
+
34
+ ```SQL
35
+ ]select t1.SC,
36
+ t1.Date,
37
+ t1.todays_close,
38
+ t2.Date,
39
+ t2.todays_close,
40
+ t3.Date,
41
+ t3.todays_close
42
+ from table1 as t1
43
+ inner join table1 as t2 on prev_date(t1.Date,1)=t2.Date and t1.SC=t2.SC
44
+ inner join table1 as t3 on prev_date(t1.Date,2)=t3.Date and t1.SC=t3.SC
45
+ ```