如何 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 BY
itemORDER BY
id 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 BY
和 SUB 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
我有一个 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 BY
itemORDER BY
id 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 BY
和 SUB 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