sql >> Databáze >  >> RDS >> PostgreSQL

SQL výběr průměrného skóre v rozsahu dat

Něco takového za předpokladu created_at je typu date

select p.name,
       hc.note as current_note,
       av.avg_note
from patients p
   join health_conditions hc on hc.patient_id = p.id
   join (
      select patient_id, 
             avg(note) as avg_note
      from health_conditions hc2
      where created_at between current_date - 30 and current_date - 1
      group by patient_id
    ) avg on t.patient_id = hc.patient_id
where hc.created_at = current_date;

Toto je syntaxe PostgreSQL. Nejsem si jistý, zda MySQL podporuje aritmetiku data stejným způsobem.

Upravit:

Tím byste měli získat nejnovější poznámku pro každého pacienta plus průměr za posledních 30 dní:

select p.name,
       hc.created_at as last_note_date
       hc.note as current_note,
       t.avg_note
from patients p
   join health_conditions hc 
     on hc.patient_id = p.id
    and hc.created_at = (select max(created_at) 
                         from health_conditions hc2 
                         where hc2.patient_id = hc.patient_id)
   join (
      select patient_id, 
             avg(note) as avg_note
      from health_conditions hc3
      where created_at between current_date - 30 and current_date - 1
      group by patient_id
    ) t on t.patient_id = hc.patient_id


  1. Je nutné zapsat ROLLBACK, pokud dotazy selžou?

  2. Jak převést ISO8601 do formátu data v php

  3. MySQL:vyberte e-maily pouze z jedné tabulky, pokud ne z jiné tabulky?

  4. Počet řádků ovlivněných UPDATE v PL/SQL