首页 > 解决方案 > 如何从表中获取最新的最后 2 条插入记录

问题描述

    CREATE TABLE `testskm`(
                `mem_id`      NUMBER(5) NOT NULL,
                 `mem_sal`     NUMBER(5) NOT NULL);

insert into `testskm` values (1,100);
insert into `testskm` values (1,200);
insert into `testskm` values (2,350);
insert into testskm values (2,150);
insert into testskm values (3,12);
insert into testskm values (1,300);
insert into testskm values (2,50);
insert into testskm values (3,13);
insert into testskm values (3,14);
insert into testskm values (3,15);

我有mem_id1,2 和 3 的插入语句。我想获取表中所有的最后 2 条插入记录mem_id

我已经尝试了下面的代码,但它只给我基于mem_sal我使用订单的记录......

select * from(
select
  mem_id, mem_sal, 
  --max(sysdate) over (partition by mem_id) latest,
  rank() over( partition BY mem_id order by mem_sal ) RISK_ORDER
  from testskm)
  where RISK_ORDER <= 2

我想要这些插入记录的输出:

insert into `testskm` values (1,200);
insert into `testskm` values (1,300);
insert into `testskm` values (2,150);
insert into `testskm` values (2,50);
insert into `testskm` values (3,14);
insert into `testskm` values (3,15);

标签: sqloracle11g

解决方案


SQL 表表示无序集。除非列指定顺序,否则没有“最后两行”。您的表没有这样的列。

你可以定义一个。在 MySQL 中,这看起来像:

create table `testskm` (
    testskm_id int auto_increment primary key,
    `mem_id`  int NOT NULL,
    `mem_sal` int NOT NULL
);

然后你可以使用row_number()

select ts.*
from (select ts.*, row_number() over (partition by mem_id order by testskm_id desc) as seqnum
      from testskm ts
     ) ts
where seqnum <= 2;

是一个 db<>fiddle。


推荐阅读