我有一个响应表,其中包含一个像这样的数据集......
id|resp_id|value|is_cleaned
1 1 Yes 0
2 1 No 1
3 2 No 0
我想获得所有响应,其中is_cleaned = 1,如果它不存在我想得到未清除的结果。到目前为止我尝试过的是,通过resp_id进行分组并使用CASE语句。不知道究竟要在CASE声明中加入什么。
到目前为止我所拥有的是
SELECT * FROM cleanedresponse GROUP BY case when is_cleaned = 1 then resp_id else resp_id end
我想要以下结果
resp_id|value|is_cleaned
1 No 1
2 No 0
答案 0 :(得分:2)
您可以先为每个max(is_cleaned)
获取resp_id
select resp_id, max(is_cleaned)
from cleanedresponse
group by resp_id
然后将其用作原始表格中的过滤器
select t1.resp_id, t1.value, t1.is_cleaned
from cleanedresponse t1
join (
select resp_id, max(is_cleaned) as max_cleaned
from cleanedresponse
group by resp_id
) t2
on t1.resp_id = t2.resp_id and
t1.is_cleaned = t2.max_cleaned