sql - sql加入表,不提供完美的结果
问题描述
让我解释一下我需要什么,我有 2 个名为 A 和 B 的表。B 是 A 的子表。
这是架构:
------------------------
Table B:
itemId version qty AId
44 1 1 200
44 1 2 201
44 2 2 200
------------------------
Table A:
id tId
200 100
201 100
------------------------
这就是我需要的:我需要具有相同 tId 的所有最新版本数量的总和。
这是我的查询:
select sum(qty) as sum from B
left join A on A.id=B.AId
where itemId=44 and tId=100 and
version=(select max(version) from B where itemId=44 and tId=100)
当一个项目获得版本 2 并且版本 1 被忽略时,结果会出错。
谢谢。
编辑:
我真正需要的是:
itemId version qty AId
44 2 2 200
44 1 2 201
Sum(qty) 的结果必须为 4,因为它们具有相同的 tId,并且它们在每个 AId 中都有 Max 版本。
解决方案
使用窗口函数。
select itemid, version, qty, aid
from (
select *, max(version) over (partition by AId) as latestVersion
from B
) as B
where version = latestVersion
总结一下
select tId, SUM(qty) AS qty_sum
from (
select *, max(version) over (partition by AId) as latestVersion
from B
) as B
join A on B.AId = A.id
where version = latestVersion
group by tId
推荐阅读
- android - FirebaseUI 膨胀异常
- python - Pyspark盐渍:用随机负值替换列中的null
- python - ElasticSearch-dsl 创建查询
- unit-testing - 使用颤振范围模型进行单元测试
- list - SWI-Prolog:当列表为空时如何停止谓词?(包括谓词)
- javascript - Active Storage 无法使用 AJAX Rails 5.2 上传图像附件
- c# - WebSocket 握手期间出错:意外的响应代码 400
- r - 使用字符串对象作为变量、运算符和值的子集数据框
- slurm - 如何向 sbatch 中的包装命令发送超时信号?
- drupal-8 - Drupal 8 为所有样式生成所有图像