记录的状态为“renewal_required”。如果它进入此状态,并且申请人确实更新了,则会生成一个副本,该副本将进入状态“in_process”(但由于其他原因,应用程序也可以具有状态“in_process”)。
现在我需要获取具有renewal_required状态的所有记录,但是,如果给定申请人的状态'in_process'中存在副本,我只会显示一个...密钥是applicant_id,是相同的复制记录。
| id | status | applicant_id |
| 1 | renewal_required | 2 |
| 2 | in_process | 3 |
| 3 | renewal_required | 4 |
| 4 | in_process | 4 |
在上面的示例中,将返回ID为1和4的记录...
可以这样做吗?感谢任何建议(排除了DB重新设计,即使设计看起来很荒谬 - 现在也无法做任何事情)
解决方案需要用于django,但如果提出SQL解决方案,我会很乐意接受它并直接适应/执行
答案 0 :(得分:0)
select a.applicant_id,COALESCE(b.status,a.status) status from
(select applicant_id,status from yourtable where status='renewal_required') a
left join
(select applicant_id,status from yourtable where status='in_process') b
on a.applicant_id = b.applicant_id;
检查DEMO
答案 1 :(得分:0)
这里是一个可能的解决方案
SELECT MAX(t1.id) as max_id, t1.status, t1.applicant_id
FROM t1
JOIN (
SELECT MIN(status) as status, applicant_id
FROM t1
WHERE status in ('renewal_required', 'in_process')
GROUP by applicant_id ) tmp
ON t1.status = tmp.status
AND t1.applicant_id = tmp.applicant_id
GROUP BY t1.status, t1.applicant_id
编辑:反思它,如果由于SELECT MIN(status)
而有更多的状态而不仅仅是这两个,那么现在这个将不起作用。你能评论一下吗?
EDIT2:可能会这样。已添加WHERE status in ('renewal_required', 'in_process')