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