質問編集履歴
3
説明追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
初学者です。お世話になります。
|
2
|
+
下記のように二つのテーブルを結合したいのですが、上手い方法が分かりません。
|
2
|
-
|
3
|
+
使うべき構文などをご教示いただけないでしょうか。具体的には「購入日時点における、最新の終値」を結合させるところで詰まっています。
|
3
4
|
|
4
5
|
何卒よろしくお願いします。
|
5
6
|
|
@@ -10,7 +11,7 @@
|
|
10
11
|
- 1日ごとの終値を記録したもの。
|
11
12
|
- テーブルB(contract)は株式購入テーブル(購入日、購入者id、購入銘柄id、購入時株価、購入口数)
|
12
13
|
- 購入した株の情報を記録したもの。
|
13
|
-
- テーブルBにテーブルAを左外部結合して、購入日時点における、最新の終値を持つ行を結合したい。
|
14
|
+
- テーブルBにテーブルAを左外部結合して、「購入日時点における、最新の終値を持つ行」を結合したい。
|
14
15
|
|
15
16
|
## やりたいこと
|
16
17
|
|
@@ -80,6 +81,7 @@
|
|
80
81
|
~~~~~
|
81
82
|
|
82
83
|
- 欲しい結果
|
84
|
+
- これを「購入日時点における、最新の終値を持つ行」一つとだけ結合させたいのですが、いまいちやり方が分かりません。
|
83
85
|
|
84
86
|
|contract_date|user_id|stock_id|stock_price|units|date|stock_id_1|closing_price|
|
85
87
|
|:--|:--:|--:|--:|--:|--:|--:|--:|
|
2
具体例の追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,12 +1,91 @@
|
|
1
1
|
初学者です。お世話になります。
|
2
|
-
下記のように二つのテーブルを結合するようなクエリの例をご教示いただけないでしょうか。「購入日時点における、最新の終値」を結合させるところで詰まっています。
|
2
|
+
下記のように二つのテーブルを結合するようなクエリの例や、使うべき構文などをご教示いただけないでしょうか。「購入日時点における、最新の終値」を結合させるところで詰まっています。
|
3
3
|
|
4
4
|
何卒よろしくお願いします。
|
5
5
|
|
6
|
-
##
|
6
|
+
## 概要
|
7
|
+
BigQueryを使っています。
|
7
8
|
- 二つのテーブルを結合したい。
|
8
|
-
- テーブルAは株価テーブル(日付、銘柄id、終値)
|
9
|
+
- テーブルA(closing_price)は株価終値テーブル(日付、銘柄id、終値)
|
9
|
-
- 1日ごとの
|
10
|
+
- 1日ごとの終値を記録したもの。
|
10
|
-
- テーブルBは株式購入テーブル(購入日、購入者id、購入銘柄id、購入時株価、購入口数)
|
11
|
+
- テーブルB(contract)は株式購入テーブル(購入日、購入者id、購入銘柄id、購入時株価、購入口数)
|
11
12
|
- 購入した株の情報を記録したもの。
|
12
13
|
- テーブルBにテーブルAを左外部結合して、購入日時点における、最新の終値を持つ行を結合したい。
|
14
|
+
|
15
|
+
## やりたいこと
|
16
|
+
|
17
|
+
- 例えば下記のようなサンプルデータがあります。
|
18
|
+
|
19
|
+
```
|
20
|
+
CREATE TABLE `project.test.closing_price`
|
21
|
+
(
|
22
|
+
date DATE NOT NULL,
|
23
|
+
stock_id INT64 NOT NULL,
|
24
|
+
closing_price INT64 NOT NULL,
|
25
|
+
);
|
26
|
+
INSERT INTO `project.test.closing_price`
|
27
|
+
( date, stock_id,closing_price )
|
28
|
+
VALUES
|
29
|
+
("2022-10-21",1,1501),
|
30
|
+
("2022-10-22",1,1502),
|
31
|
+
("2022-10-23",1,1503),
|
32
|
+
("2022-10-24",1,1504),
|
33
|
+
("2022-10-25",1,1505);
|
34
|
+
CREATE TABLE `project.test.contract`
|
35
|
+
(
|
36
|
+
contract_date DATE NOT NULL,
|
37
|
+
user_id INT64 NOT NULL,
|
38
|
+
stock_id INT64 NOT NULL,
|
39
|
+
stock_price INT64 NOT NULL,
|
40
|
+
units INT64 NOT NULL,
|
41
|
+
);
|
42
|
+
INSERT INTO `project.test.contract`
|
43
|
+
( contract_date, user_id, stock_id, stock_price,units )
|
44
|
+
VALUES
|
45
|
+
("2022-10-21",1,1,1501,1),
|
46
|
+
("2022-10-22",1,1,1502,1),
|
47
|
+
("2022-10-23",1,1,1503,1),
|
48
|
+
("2022-10-24",1,1,1504,1),
|
49
|
+
("2022-10-25",1,1,1505,1),
|
50
|
+
("2022-10-26",1,1,1506,1),
|
51
|
+
("2022-10-27",1,1,1507,1),
|
52
|
+
("2022-10-28",1,1,1508,1),
|
53
|
+
("2022-10-29",1,1,1509,1),
|
54
|
+
("2022-10-30",1,1,1510,1);
|
55
|
+
|
56
|
+
```
|
57
|
+
- 例えば下記のようなSQLを実行すると、当然ですが、「購入日時点における、最新の終値を持つ行」だけでなく、「購入日以前の終値を持つ行」全てと結合されてしまいます。
|
58
|
+
|
59
|
+
```
|
60
|
+
SELECT * FROM `project.test.contract` AS A
|
61
|
+
LEFT JOIN `project.test.closing_price` AS B
|
62
|
+
ON A.stock_id = B.stock_id and A.contract_date > B.date
|
63
|
+
order by A.contract_date;
|
64
|
+
```
|
65
|
+
|
66
|
+
- 結果
|
67
|
+
|contract_date|user_id|stock_id|stock_price|units|date|stock_id_1|closing_price|
|
68
|
+
|:--|:--:|--:|--:|--:|--:|--:|--:|
|
69
|
+
2022-10-21|1|1|1501|1|||
|
70
|
+
2022-10-22|1|1|1502|1|2022-10-21|1|1501|
|
71
|
+
2022-10-23|1|1|1503|1|2022-10-21|1|1501|
|
72
|
+
2022-10-23|1|1|1503|1|2022-10-22|1|1502|
|
73
|
+
2022-10-24|1|1|1504|1|2022-10-21|1|1501|
|
74
|
+
2022-10-24|1|1|1504|1|2022-10-22|1|1502|
|
75
|
+
2022-10-24|1|1|1504|1|2022-10-23|1|1503|
|
76
|
+
2022-10-25|1|1|1505|1|2022-10-21|1|1501|
|
77
|
+
2022-10-25|1|1|1505|1|2022-10-22|1|1502|
|
78
|
+
2022-10-25|1|1|1505|1|2022-10-23|1|1503|
|
79
|
+
2022-10-25|1|1|1505|1|2022-10-24|1|1504|
|
80
|
+
~~~~~
|
81
|
+
|
82
|
+
- 欲しい結果
|
83
|
+
|
84
|
+
|contract_date|user_id|stock_id|stock_price|units|date|stock_id_1|closing_price|
|
85
|
+
|:--|:--:|--:|--:|--:|--:|--:|--:|
|
86
|
+
2022-10-21|1|1|1501|1|||
|
87
|
+
2022-10-22|1|1|1502|1|2022-10-21|1|1501|
|
88
|
+
2022-10-23|1|1|1503|1|2022-10-22|1|1502|
|
89
|
+
2022-10-24|1|1|1504|1|2022-10-23|1|1503|
|
90
|
+
2022-10-25|1|1|1505|1|2022-10-24|1|1504|
|
91
|
+
~~~~~
|
1
tag
test
CHANGED
File without changes
|
test
CHANGED
File without changes
|