我在 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 可以是书之类的东西)。类型列表示:0 不可预订,1:可预订。
示例编号:5 我只想获取不可预订的类型,因为有数据集修复状态打开并且事物不可预订。
示例编号:6 我只想获得可预订的类型,因为尽管维修状态已打开,但它仍是可预订的。
我可以通过一个选择查询来完成吗(这个查询可以包含子查询或/和连接)?
我期望这样的结果:
id type repair status
1 0 open
2 0 open
3 0 open
4 1 repaired
5 0 open
6 1 open
最佳答案
如果您希望在 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)
关于sql - 如何通过 select 和 subselect 或 join 语句获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56186073/