【问题标题】:How to select last insert value for specific column如何选择特定列的最后一个插入值
【发布时间】:2017-12-10 18:52:32
【问题描述】:

我有两张表,详情如下:

 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

我不想最高价格我想最后插入价格

【问题讨论】:

标签: sql oracle select


【解决方案1】:

没有办法说最后插入了哪个值。对于 ID 3,有两个价格 34 和 21,但没有任何指示何时插入记录。表中的数据没有内在的顺序;记录被认为是无序的。

你需要一个日期或其他东西来表明插入顺序。

如果表已经以这种方式存在,您将迷失方向,因为您无法知道哪些值是最新的,哪些是过时的。如果这是一个新表并且您只打算稍后填充它,那么添加一个日期和一个触发器以在插入时使用 sysdate 填充日期。

【讨论】:

  • 如果我在插入第二个表(zxy)时添加了新列并插入了一个系统日期,那么我可以选择?
  • 如果记录有日期,有几种方法可以选择最后的价格。一个是Oracle 的KEEP LAST,另一个是标准SQL 的ROW_NUMBER。我应该更新我的答案并向您展示如何或您想自己查找吗?
【解决方案2】:

根据要求,我看不到第一个表的任何用法。试试:

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;

【讨论】:

    猜你喜欢
    • 2014-07-02
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多