使用DBサーバ MySQL
バージョン 5.6
同一テーブルから、複数の条件で一件ずつ取得したレコードをUNIONしたいのですが方法がわかりません。
例として下のようなテーブルがあるとします。
テーブル名 emp_data
id | ステータス | 行き先 | 登録日 |
---|---|---|---|
1 | C | テスト公園 | 2021/01/30 |
2 | B | テストビル | 2021/02/01 |
3 | A | テスト公園 | 2021/02/02 |
4 | A | テスト病院 | 2021/02/03 |
5 | C | テスト病院 | 2021/02/04 |
6 | A | テストビル | 2021/02/05 |
7 | B | テスト公園 | 2021/02/06 |
8 | A | テスト公園 | 2021/02/07 |
9 | C | テストビル | 2021/02/08 |
10 | A | テスト病院 | 2021/02/09 |
ステータスがそれぞれA、B、Cとあり、それぞれのステータスで一件だけ取得したレコードをUNION ALLするもうまくできません。
問題のコード
SQL
1SELECT * 2FROM emp_data 3WHERE ステータス='A' 4ORDER BY 登録日 DESC 5LIMIT 1 6UNION ALL 7SELECT * 8FROM emp_data 9WHERE ステータス='B' 10ORDER BY 登録日 DESC 11LIMIT 1 12UNION ALL 13SELECT * 14FROM emp_data 15WHERE ステータス='C' 16ORDER BY 登録日 DESC 17LIMIT 1
取得したい結果
id | ステータス | 行き先 | 登録日 |
---|---|---|---|
10 | A | テスト病院 | 2021/02/09 |
7 | B | テスト公園 | 2021/02/06 |
9 | C | テストビル | 2021/02/08 |
どのようにSQLを組めばよいでしょうか。
お力添えよろしくお願いします。
回答者様用SQL
こちらのSQLを流していただくと私の環境と同じ環境が出来上がると思います
SQL
1/* DB作成*/ 2create database test 3 4/* ユーザー作成*/ 5grant all on blog_cakephp.* to test@localhost identified by 'test'; 6use test 7 8/* テーブル作成 */ 9create emp_data ( 10 id int unsigned auto_increment primary key, 11 status char(1), 12 destination varchar(255), 13 created datetime default null, 14); 15 16insert into posts (status, destination, created) values 17('A', 'テスト公園', now()), 18('B', 'テスト公園', now()), 19('C', 'テスト公園', now()), 20('A', 'テスト病院', now()), 21('B', 'テスト病院', now()), 22('C', 'テスト病院', now()), 23('A', 'テスト歯医者', now()), 24('B', 'テスト歯医者', now()), 25('C', 'テスト歯医者', now());
回答2件
あなたの回答
tips
プレビュー