sql - 如何从表中获取最新的最后 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_id
1,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);
解决方案
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。
推荐阅读
- sql-server - 在 T-SQL 查询中从子组中选择所有用户
- java - 如何提高 Flink 中数据流实现的不同计数?
- azure-virtual-machine - 如何防止本地用户将数据从 Azure 虚拟机下载到外部
- r - 读取受密码保护的 MS-Word 文件
- elasticsearch - 从封闭列表中搜索,并仅形成该列表
- python-3.x - 尝试导入 torchvision 时出现导入错误
- reactjs - 注册表单作为组件传递给路由时出错
- symfony - 无法刷新令牌,因为用户已更改 Syfmony 4 - EquatableInterface 问题
- package - 包限定名称。Package::<&var> 与 &Package::var 之间的差异(如果有的话)?
- android - SMS Retriever API 总是导致超时,尽管消息格式正确