やりたこと
「表を結合し、日付が新しい順に並べたい」です
問題点
以下のクエリを実行すると2018-11-13 00:00:00
のデータが3件取得されてしまいます。
sql
1select 2 * 3from item_master im 4inner join item_prices ip on im.id = ip.item_id 5group by 6 ip.item_id 7order by 8 ip.created_at desc, 9 ip.item_id asc
確認のため以下の通り group by を外したクエリを実行すると問題なくソートされているのですがなぜ最新の15日のデータが取れず、13日のデータになってしまうのでしょうか?
また、15日の最新のデータを取るにはどのようなSQLを書けばよいでしょうか?
sql
1select 2 * 3from item_master im 4inner join item_prices ip on im.id = ip.item_id 5/* group by 6 ip.item_id */ 7order by 8 ip.created_at desc, 9 ip.item_id asc
データベース テーブル構成
sql
1CREATE TABLE IF NOT EXISTS `item_master` ( 2 `id` int(11) NOT NULL, 3 `name` varchar(32) NOT NULL, 4 PRIMARY KEY (`id`) 5) ENGINE=InnoDB DEFAULT CHARSET=utf8; 6 7INSERT INTO `item_master` (`id`, `name`) VALUES 8 (1, 'りんご'), 9 (2, 'みかん'), 10 (3, 'バナナ'); 11 12CREATE TABLE IF NOT EXISTS `item_prices` ( 13 `item_id` int(11) NOT NULL, 14 `price` int(11) NOT NULL, 15 `created_at` timestamp NOT NULL DEFAULT current_timestamp(), 16 KEY `item_id` (`item_id`) 17) ENGINE=InnoDB DEFAULT CHARSET=utf8; 18 19INSERT INTO `item_prices` (`item_id`, `price`, `created_at`) VALUES 20 (1, 100, '2018-11-13 00:00:00'), 21 (1, 110, '2018-11-14 00:00:00'), 22 (1, 120, '2018-11-15 00:00:00'), 23 (2, 130, '2018-11-13 00:00:00'), 24 (2, 140, '2018-11-14 00:00:00'), 25 (2, 150, '2018-11-15 00:00:00'), 26 (3, 160, '2018-11-13 00:00:00'), 27 (3, 170, '2018-11-14 00:00:00'), 28 (3, 180, '2018-11-15 00:00:00');
MariaDB Version
10.2.12-MariaDB
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/11/16 08:55