我正在尝试从我的Audit_table加入最新的OLD_VAL,它记录了我的主表中名为Insurance_State的列的更改。
我当前查询的问题是它在我的结果集中重复返回的行显示每一个 OLD_VAL 一条保险单中的记录
SELECT ins.last_upd, cc.id, cc.claim_date, pol.policy_id, ins.state, adt.old_val, ins.review_date, ins.latest_reason, bll.ou_num
FROM CUSTOMER_CLAIM cc
JOIN CUSTOMER_CAR car
ON cc.id = car.ccid
JOIN POLICY pol
ON car.integ_id = pol.integ_id
JOIN INSURANCE_STATE ins
ON pol.policy_id = ins.policy_id
JOIN BILLING_ACCT bll
ON pol.bill_accnt_id = bll.row_id
--only want to the most recent record from below table
JOIN AUDIT_TABLE adt
ON pol.policy_id = hst.policy_id
这给出了非常简单的术语输出
D --> A
D --> B
D --> C
实际上我只想要最新的old_val,因此输出将是
D --> C
如何调整我的查询以便这样做。
我尝试在连接中做一个内部select语句,但它不喜欢我的语法
有什么想法吗?
答案 0 :(得分:1)
你有一点错误:
JOIN AUDIT_TABLE adt ON pol.policy_id = hst.policy_id
可能是这样:
JOIN AUDIT_TABLE adt ON pol.policy_id = adt.policy_id
回答你的问题:
join (
select policy_id, old_val from (
select at.policy_id, at.old_val,
rank() over (partition by at.policy_id order by at.old_val desc) as rnk
from AUDIT_TABLE at
) where rnk = 1
) adt on pol.policy_id = adt.policy_id
如果状态是这样的名称(A,B,C,D等),这应该有用。如果不是,则在表达式order by at.old_val desc
中,您应该使用其他字段,例如ID或添加时间。