Table t1
rule_id
1
2
3
3
Table t2
rule_id status record_seq
1 approve 2
1 pending 1
2 approve 2
2 pending 1
尝试如下
select * from t1,t2 where t1.rule_id=t2.rule_id and record_seq=2;
rule_id rule_id status record_seq
1 1 approve 2
2 2 approve 2
一旦状态从待定更改为批准,record_seq将更新。但是record_seq不喜欢静态,所以根据我的假设,对record_seq进行取值和条件是错误的。
所以请向我建议另一种方式,使我仅在具有加入条件或任何其他逻辑的情况下才能获得批准状态。
答案 0 :(得分:1)
尝试一下
select *
from t1 inner join t2 on (t1.rule_id=t2.rule_id )
where t2.record_seq = (select max(record_seq) from t2 t
where t.rule_id = t2.rule_id)
注意:我假设您想要最新的record_seq
答案 1 :(得分:0)
您似乎正在使用SQL Server,如果可以,则可以将row_number()
函数与JOIN
一起使用:
select top (1) with ties t1.rule_id, t2.status, t2.record_seq
from t1 inner join
t2
on t1.rule_id = t2.rule_id
order by row_number() over (partition by t1.rule_id order by t2.record_seq desc);
但是,这没有保证提供approve
状态rules_id。因此,您可以将order by
子句更改为:
. . .
order by row_number() over (partition by t1.rule_id
order by (case when t2.status = 'approve' then 0 else 1 end)
);