I'm having trouble trying to define the SQL query for this table:
There's a table of patients and their weight readings recorded on visits with the following columns:
In other words, if in two records two visit IDs are the same, then two weight readings have been taken on that same visit date.
I have this query to "get all patients with at least two weight readings above 150":
select patient_id
from patients
where weight_val > 50
group by patient_id
having count(*) >= 2
Here's my problem: What if I want to modify this query so that I can query the following:
Is it possible to do it without removing the "group by" statement? if not, what is your recommended approach? I'm also open to adding a date column instead of visit ID if it makes it easier (i'm using Oracle).
Use:
SELECT p.patient_id
FROM PATIENTS p
WHERE p.weight_val > 150
GROUP BY p.patient_id
HAVING COUNT(DISTINCT p.visit_id) >= 2
Use:
SELECT DISTINCT p.patient_id
FROM PATIENTS p
WHERE p.weight_val > 150
GROUP BY p.patient_id, p.visit_id
HAVING COUNT(*) >= 2
try like this:
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;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With