我有两张桌子,详情如下:
create table pbc(
id number(5) primary key,
name varchar2(15));
insert into pbc values(2,'product1');
insert into pbc values(3,'product1');
insert into pbc values(4,'product1');
insert into pbc values(5,'product1');
insert into pbc values(6,'product1');
insert into pbc values(7,'product1');
,另一张表是
create table zxy(
id number(5),
price number(10));
alter table zxy add(constraint zxyid_fk FOREIGN KEY (id) references pbc(id));
insert into zxy values(2,67);
insert into zxy values(3,34);
insert into zxy values(3,21);
insert into zxy values(4,65);
insert into zxy values(5,32);
insert into zxy values(5,23);
insert into zxy values(5,10);
下面给出第二个表选择数据
Id price
2 67
3 34
3 21
4 65
5 32
5 23
5 10
现在我必须选择最后插入的值,例如
id price
2 67
3 21
4 65
5 10
我不希望最高价格我想上次插入价格
答案 0 :(得分:3)
无法说出最后插入了哪个值。对于ID 3,有两个价格34和21,但没有任何内容表明记录何时被插入。表中的数据没有固有的顺序;这些记录被认为是无序的。
您需要一个日期或其他东西来指示插入顺序。
如果表格已经存在,那么您就会丢失,因为您无法知道哪些值是最新的,哪些值是过时的。如果这是一个新表,并且您只打算稍后填写它,那么添加日期和触发器以在插入时使用sysdate填充日期。
答案 1 :(得分:0)
根据要求,我没有看到第一张表的任何用法。试试:
SELECT Z.ID, B.PRICE
FROM
(
SELECT A.ID, MAX(A.RNUM) AS LAST_INSERTED
FROM
(SELECT ID, PRICE, ROW_NUMBER() OVER (PARTITION BY ID) AS RNUM FROM ZXY) A
GROUP BY A.ID
) Z
INNER JOIN
(SELECT ID, PRICE, ROW_NUMBER() OVER (PARTITION BY ID) AS RNUM FROM ZXY) B
ON Z.ID = B.ID AND Z.LAST_INSERTED = B.RNUM;