PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

SQL chọn điểm trung bình trong phạm vi ngày

Một cái gì đó giống như thế này giả sử created_at thuộc loại 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;

Đây là cú pháp PostgreSQL. Tôi không chắc liệu MySQL có hỗ trợ số học ngày theo cùng một cách hay không.

Chỉnh sửa:

Điều này sẽ giúp bạn nhận được ghi chú gần đây nhất cho từng bệnh nhân, cộng với mức trung bình trong 30 ngày qua:

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. Lưu trữ đầu ra của truy vấn đã chọn trong một mảng trong postgres

  2. tách các hàng trong Redshift

  3. Tên chỉ mục Postgres cần phải là duy nhất ở cấp độ nào?

  4. Cách truyền từ văn bản sang int nếu cột chứa cả giá trị int và NULL trong PostgreSQL

  5. Làm thế nào để sử dụng ALIAS trong mệnh đề PostgreSQL ORDER BY?