sql >> データベース >  >> RDS >> PostgreSQL

日付範囲全体の平均スコアを選択するSQL

    created_atを想定したこのようなもの タイプは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;
    

    これはPostgreSQLの構文です。 MySQLが同じ方法で日付演算をサポートしているかどうかはわかりません。

    編集:

    これにより、各患者の最新のメモに加えて、過去30日間の平均が表示されます。

    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. MySQLJSON配列から個別の値を取得する

    2. ハッシュおよびソルトされたパスワードを逆にする方法は?

    3. データベースからマーカー半径内に収まる結果を取得します

    4. フォームへの二重投稿を防ぐ方法は何ですか? (PHP)