我在尝试为此表定义SQL查询时遇到问题:
在访问时记录患者及其体重读数表,其中包括以下列:
换句话说,如果在两个记录中两个访问ID相同,则在同一访问日期已经进行了两次重量读数。
我有这个问题“让所有患者至少有两个体重读数超过150”:
select patient_id
from patients
where weight_val > 50
group by patient_id
having count(*) >= 2
这是我的问题:如果我想修改此查询以便查询以下内容该怎么办:
是否可以在不删除“分组依据”声明的情况下执行此操作?如果没有,你推荐的方法是什么?如果它更容易(我正在使用Oracle),我也愿意添加日期列而不是访问ID。
答案 0 :(得分:9)
使用:
SELECT p.patient_id
FROM PATIENTS p
WHERE p.weight_val > 150
GROUP BY p.patient_id
HAVING COUNT(DISTINCT p.visit_id) >= 2
使用:
SELECT DISTINCT p.patient_id
FROM PATIENTS p
WHERE p.weight_val > 150
GROUP BY p.patient_id, p.visit_id
HAVING COUNT(*) >= 2
答案 1 :(得分:1)
尝试这样:
1
select patient_id
from patients
where weight_val > 150
group by patient_id
having count(*) >= 2 and count(*) = count(distinct visit_id);
2
select patient_id
from patients
where weight_val > 150
group by patient_id
having count(*) >= 2 and count(distinct visit_id) = 1;