質問編集履歴

3

説明追加

2022/11/16 04:40

投稿

Jonathan_Sf
Jonathan_Sf

スコア13

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

具体例の追加

2022/11/11 02:19

投稿

Jonathan_Sf
Jonathan_Sf

スコア13

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

2022/11/10 08:27

投稿

Jonathan_Sf
Jonathan_Sf

スコア13

test CHANGED
File without changes
test CHANGED
File without changes