sql - SQL Server 2008:加入 3 个表并从子表中针对每个父记录选择最后输入的记录
问题描述
我有以下 3 个表,最后输入原因表中的原因代码与索赔表中的每个索赔号相对应。
原因:
Rid |chargeid| enterydate user reasoncode
-----|--------|-------------|--------|----------
1 | 210 | 04/03/2018 | john | 99
2 | 212 | 05/03/2018 | juliet | 24
5 | 212 | 26/12/2018 | umar | 55
3 | 212 | 07/03/2018 | borat | 30
4 | 211 | 03/03/2018 | Juliet | 20
6 | 213 | 03/03/2018 | borat | 50
7 | 213 | 24/12/2018 | umer | 60
8 | 214 | 01/01/2019 | john | 70
收费:
chargeid |claim# | amount
---------|-------|---------
210 | 1 | 10
211 | 1 | 24.2
212 | 2 | 5.45
213 | 2 | 76.30
214 | 1 | 2.10
索赔:
claimno | Code | Code
--------|-------|------
1 | AH22 | AH22
2 | BB32 | BB32
预期的结果是这样的:
claimno | enterydate | user | reasoncode
--------|-------------|--------|-----------
1 | 01/01/2019 | john | 70
2 | 26/12/2018 | umer | 55
我已经应用了许多解决方案,但没有运气。以下是我尝试使用 SQL Server 2008 的最新解决方案,但结果仍然不正确。
With x As
(
select r.chargeid,r.enterydate,ch.claimno from charges ch
join (select chargeid,max(enterydate) enterydate,user from Reasons group by chargeid) r on r.chargeid = ch.chargeid
)
select x.*,r1.user, r1.reasoncode from x
left outer join Reasons r1 on r1.chargeid = x.chargeid and r1.enterydate = x.enterydate
--group by x.claimno
解决方案
您可以尝试使用row_number()
select * from
(
select r.chargeid,r.enterydate,ch.claimno,user,reasoncode,
row_number() over(partition by ch.claimno order by r1.enterydate desc) as rn
from charges ch left outer join Reasons r1 on r1.chargeid = ch.chargeid
)A where rn=1
推荐阅读
- symfony - VichUploader 捆绑一个 Gaufrette
- python - PYQT5 中的布局大小
- javascript - 仅当它未未定义时才用于推送到数组的一个衬垫,否则分配
- javascript - 使用 ACF 根据其他地址信息获取纬度/经度?
- python - 在两个日期之间选择数据框行的问题
- c# - 难以将带有名称的图像路径保存到 SQL Server
- angular - 如何订阅 Rxjs6 中的运算符
- c# - 可以使用反射创建命名元组类型吗?
- java - 在 Spring 中为 Imap 空闲通道适配器设置事务管理器
- ruby-on-rails - Rails 和 html 表单(在这种情况下具体化)