PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

SQL wybierający średni wynik w zakresie dat

Coś takiego, zakładając created_at jest 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;

To jest składnia PostgreSQL. Nie jestem pewien, czy MySQL obsługuje arytmetykę dat w ten sam sposób.

Edycja:

Powinno to dostarczyć najnowszą notatkę dla każdego pacjenta oraz średnią z ostatnich 30 dni:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zmienić domyślne wartości postgresql.conf w Openshift?

  2. Niezdefiniowana metoda Railsów dla ActiveRecord_Associations_CollectionProxy

  3. Jak przekonwertować ciąg na znacznik czasu w PostgreSQL

  4. Usuń puste wiersze

  5. Ani percentile_cont, ani percentile_disc nie obliczają pożądanego 75. percentyla w PostgreSQL 9.6.3