回答編集履歴

1

調整

2019/07/05 07:40

投稿

yambejp
yambejp

スコア114850

test CHANGED
@@ -1,3 +1,89 @@
1
1
  ago_closeって前日の終値じゃないんですか?
2
2
 
3
3
  前日のtoday_closeと当日のago_closeの値があっていません
4
+
5
+
6
+
7
+ # function
8
+
9
+ 任意の日付のn日前を拾うfunctionを作ってみました
10
+
11
+ 以下一度だけ実行してください
12
+
13
+ ```SQL
14
+
15
+ drop function if exists prev_date;
16
+
17
+ delimiter //
18
+
19
+ create function prev_date(d datetime,i int) RETURNS datetime DETERMINISTIC
20
+
21
+ begin
22
+
23
+ set @a=null,@b=null;
24
+
25
+ select (select count(*)+1 from (select distinct Date from table1) as t1 where t1.Date>t2.Date) into @a
26
+
27
+ from (select distinct Date from table1) as t2
28
+
29
+ where Date=d;
30
+
31
+ select Date into @b
32
+
33
+ from (select distinct Date from table1) as t3
34
+
35
+ having (select count(*)+1 from (select distinct Date from table1) as t4 where t4.Date>t3.Date)=@a+i;
36
+
37
+ return @b;
38
+
39
+ end
40
+
41
+ //
42
+
43
+ delimiter ;
44
+
45
+ ```
46
+
47
+ - テスト
48
+
49
+ ```SQL
50
+
51
+ select SC,
52
+
53
+ Date,
54
+
55
+ prev_date(Date,1),
56
+
57
+ prev_date(Date,2)
58
+
59
+ from table1
60
+
61
+ ```
62
+
63
+ - functionを利用して1日前、2日前のtodays_closeを拾う
64
+
65
+
66
+
67
+ ```SQL
68
+
69
+ ]select t1.SC,
70
+
71
+ t1.Date,
72
+
73
+ t1.todays_close,
74
+
75
+ t2.Date,
76
+
77
+ t2.todays_close,
78
+
79
+ t3.Date,
80
+
81
+ t3.todays_close
82
+
83
+ from table1 as t1
84
+
85
+ inner join table1 as t2 on prev_date(t1.Date,1)=t2.Date and t1.SC=t2.SC
86
+
87
+ inner join table1 as t3 on prev_date(t1.Date,2)=t3.Date and t1.SC=t3.SC
88
+
89
+ ```