我在postgres数据库中有这些数据:
id type repair status
1 0 open
1 1 repaired
2 0 open
3 0 open
3 1 repaired
3 1 repaired
4 1 repaired
5 0 open
5 1 open
5 1 repaired
5 0 open
5 1 repaired
6 1 repaired
6 1 open
我想获取所有ID的状态(ID可以是类似book之类的东西)。类型列表示:0不可预订,1:可预订。
示例ID:5 我只想获取不可预订的类型,因为有数据集修复状态处于打开状态,而该事物不可预订。
示例ID:6 我只想预订类型,因为尽管处于维修状态,但事情还是可以预订的。
我可以通过一个选择查询(该查询可以包含子查询或/和联接)吗?
我希望得到这样的结果:
id type repair status
1 0 open
2 0 open
3 0 open
4 1 repaired
5 0 open
6 1 open
答案 0 :(得分:1)
如果您想在Postgres中每id
行,最好的解决方案是distinct on
。唯一的问题是您的order by
子句。
您的规则很难破译。我最好的猜测是:
select distinct on (id) t.*
from t
order by id, bookable desc, (status = 'open')::int desc;
在标准SQL中,您可以将order by
更改为:
order by id, bookable desc,
(case when status = 'open' then 1 else 0 end)