sql - 加入并选择具有最大值的列
问题描述
我正在处理 Oracle 中的两个表,TABLE_A 包含唯一 ID 和余额(数字)。TABLE_B 显示相同 ID 的特定交易并包含以下字段:ID(非唯一)、BAL、Sequence_number。我想检查 TABLE_A.Balance 是否始终等于具有 Max(Sequence_number) 的 TABLE_B.Balance。所以我希望每个 ID 只有一行。
我尝试了以下方法,但它不会为每个 ID 返回唯一的行,而是返回多个。这是为什么?
Select a.ID, a.Balance,b.Balance, b.sequence_number From TABLE_A a Inner join (select ID, Balance, max(sequence_number) as sequence_number from TABLE_B group by ID, Balance) b On a.ID = B.ID Group by a.ID, a.Balance, b.Balance, b.sequence_number
表_A
ID_______Balance
1_______10
2_______15
3_______50
表_B
ID____Balance____Sequence_number
1_______19_______1
1_______75_______2
1_______10_______3
2_______39_______1
2_______15_______2
3_______120_______1
3_______89_______2
3_______57_______3
3_______50_______4
解决方案
您可以使用 row_number()over() 窗口函数来获取 ID 明智的最高序列号的行。
架构:
create table TABLE_A(ID int, Balance int); insert into TABLE_A values(1,10); insert into TABLE_A values(2,15); insert into TABLE_A values(3,50); create table TABLE_B (ID int , Balance int,Sequence_number int); insert into TABLE_B values(1,19,1); insert into TABLE_B values(1,75,2); insert into TABLE_B values(1,10,3); insert into TABLE_B values(2,39,1); insert into TABLE_B values(2,15,2); insert into TABLE_B values(3,120,1); insert into TABLE_B values(3,89,2); insert into TABLE_B values(3,57,3); insert into TABLE_B values(3,50,4); GO
询问:
with cte as ( select id, balance, sequence_number, row_number()over (partition by id order by sequence_number desc)rnk from table_b ) Select a.ID, a.Balance,b.Balance, b.sequence_number From TABLE_A a Inner join cte b on a.id=b.id and rnk=1; GO
输出:
ID 平衡 平衡 序列号 1 10 10 3 2 15 15 2 3 50 50 4
db<>在这里摆弄
推荐阅读
- scala - 如何在键盘上键入 unicode“向右双箭头”
- bash - Linux,Bash 脚本 - 循环通过 sqlcmd 连接 SELECT 结果
- laravel - 如何阻止 Illuminate\Http\UploadedFile 删除文件
- c - 您如何在 C 中向用户提出多个问题?
- list - F# List split,divide
- python - SOQL Socrata 查询日期时间之间
- ruby-on-rails - Heroku PostGres 数据库测试配置
- java - 插入一行java后填充DefaultTableModel
- javascript - 在 Python/Flask 中访问 HTML 表单数据
- intellij-idea - Iintellij 2017 Java 项目与 IntelliJ 2018 不兼容?