同一グループ内の最大値を取得したviewの作成を行いたいと思っています。
いろいろ調べて何度か実行してみたのですがうまくいかないため質問させていただきました。
sql
1table name => sample_tbl 2 id | group | date //最新 3----+-------+------------- 4 1 | A | 2018-04-13 * 5 2 | A | 2018-04-12 6 3 | B | 2018-04-11 7 4 | B | 2018-04-12 8 5 | B | 2018-04-17 * 9 6 | C | 2018-04-14 * 10 7 | C | 2018-04-12 11 8 | D | 2018-04-13 * 12 13table name => sample_tbl_2 14 id_2 | group | 15------+---------- 16 1 | A | 17 2 | B | 18 3 | C | 19 4 | D |
上記のような2つのテーブルがあるとします。
sample_tblの同一グループ(group)内で、最大の日付(date)のみ取得したいです。
以下のSQLを実行し、取得することができました。
sql
1SELECT * FROM sample_tbl 2WHERE date = ( 3 SELECT Max(date) 4 FROM sample_tbl t1 5 WHERE group = t1.group 6); 7 8// 実行結果 9 id | group | date //最新 10----+-------+------------- 11 1 | A | 2018-04-13 * 12 5 | B | 2018-04-17 * 13 6 | C | 2018-04-14 * 14 8 | D | 2018-04-13 *
このテーブルのgroupカラムは別テーブル「sample_tbl_2」と紐づいていて、
sample_tbl_2ではこのカラムはユニークになっています。
次に行いたいのがビューの作成なのですが、以下の3カラムを持たせたいです。
①sample_tbl_2.id_2 ②sample_tbl_2.group(sample_tbl.groupは多対一、sample_tbl_2はユニーク) ③同一のgroup内で、sample_tbl.dateの最新日付 // 期待値 ①sample_tbl_2.id_2 | ②sample_tbl_2.group | ③sample_tbl.date ---------------------+----------------------+------------------ 1 | A | 2018-04-13 2 | B | 2018-04-17 3 | C | 2018-04-14 4 | D | 2018-04-13
先ほどのsqlを組み合わせて以下のsqlを実行したところ、エラーが表示されました。
sql
1CREATE VIEW sample_view AS 2SELECT 3sample_tbl_2.id_2, 4sample_tbl_2.group, 5( 6 SELECT date FROM sample_tbl 7 WHERE date = ( 8 SELECT Max(date) 9 FROM sample_tbl t1 10 WHERE group = t1.group 11 ) 12) AS date 13FROM 14 sample_tbl_2 15 INNER JOIN 16 sample_tbl 17 ON 18 sample_tbl_2.group = sample_tbl.group; 19 20 21// エラー 22ERROR: more than one row returned by a subquery used as an expression
どのようにすれば期待通りの結果が得られるでしょうか。
ご教示くださいますようお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/17 07:31