如何 select 在 table 中最新插入的项目行

How to select latest inserted row of items in a table

我有一个 table current_rate 存储不同项目的当前汇率以及日期和时间。此处每次插入当前汇率时不会更新,因此它具有每个项目的汇率变化的历史记录。 **current_rate ** table

id item_id item_slug rate valid_date
1 2 wallet 400 2021-05-07 12:24:35
2 1 bag 1000 2021-05-07 11:13:32
3 1 bag 1100 2021-05-07 11:45:39
4 3 mug 200 2021-05-07 12:48:39
5 2 wallet 390 2021-05-07 12:13:39

我试图根据每个项目获取最后插入的行,而不考虑日期和时间。 我试过了 $currentStatus = CurrentRate::find()->groupBy(["item"])->orderBy(['id' => SORT_DESC]); 这将生成 Rawquery SELECT * FROM current_rateGROUP BYitemORDER BYid DESC 并没有得到结果。 我想要的结果

id item_id item_slug rate valid_date
3 1 bag 1100 2021-05-07 11:45:39
4 3 mug 200 2021-05-07 12:48:39
5 2 wallet 390 2021-05-07 12:13:39

如何得到每个项目的最后插入(id-autoincriment)的结果。 此致

select * from `current_rate` where `item_id` = <item_id> AND `item_slug` = <item_slug> AND (`valid_date`, `time`) IN (select MAX(`valid_date`), MAX(`time`) from `current_rate` where `item_id` = <item_id> AND `item_slug` = <item_slug>)

对于项目 ID 和项目 slug 组合,你每次都会得到一行。

使用 GROUP BYSUB QUERY 得到最终输出。

查询SQL:

select * from current_rate
where valid_date in
(select MAX(valid_date) from current_rate group by item_id);

架构SQL:

create table current_rate(
  id int NOT NULL AUTO_INCREMENT,
  item_id varchar(255),
  item_slug varchar(255),
  rate int,
  valid_date TIMESTAMP,
  PRIMARY KEY (id)
);

insert into current_rate (item_id, item_slug, rate, valid_date)
values (1, 'bag', 1000, '2021-05-07 11:13:32');
insert into current_rate (item_id, item_slug, rate, valid_date)
values (1, 'bag', 1100, '2021-05-07 11:45:39');
insert into current_rate (item_id, item_slug, rate, valid_date)
values (2, 'wallet', 400, '2021-05-07 12:24:35');
insert into current_rate (item_id, item_slug, rate, valid_date)
values (2, 'wallet', 390, '2021-05-07 12:13:39');
insert into current_rate (item_id, item_slug, rate, valid_date)
values (3, 'mug', 200, '2021-05-07 12:48:39');

找到 DB fiddle