【发布时间】:2019-12-07 01:33:38
【问题描述】:
目标:
我想查询表以仅选择每个项目的最新版本。
问题:
- 为什么 Query1 在
SQLite中工作(我在想group by子句会抛出错误,因为select语句包含content列并且它不是@ 的一部分987654325@ 子句)? -
Query1 会在
Oracle中抛出错误吗? - Query1 是否优于 Query2?
- 有没有更好的方法来编写查询?
查询1:
select item_id,
max(version_number),
content
from item_version
group by item_id;
查询2:
select iv.*
from item_version iv,
(select item_id,
max(version_number) latest_version_number
from item_version
group by item_id) liv
where iv.item_id = liv.item_id
and iv.version_number = liv.latest_version_number;
设置表:
create table item_version(
item_id varchar,
version_number integer,
content varchar,
primary key (item_id, version_number)
);
insert into item_version values (1, 1, null);
insert into item_version values (2, 1, "Content A");
insert into item_version values (2, 2, "Content B");
insert into item_version values (3, 1, "Content C");
insert into item_version values (3, 2, null);
insert into item_version values (4, 1, "Content D");
insert into item_version values (4, 2, null);
【问题讨论】: