0

技術者が医師のために行ったジョブを日付別に保持するログというテーブルがあります。次のフィールドが含まれていますref_doctor_id (doctor), technician_id (technician) and dos (date)
技術者は、特定の日に複数の医師のために仕事をすることがあります。医師ごとに、技術者が特定の日に他の医師のために仕事をしたかどうかを調べる必要があります。もしそうなら、その日に彼が何人の医師のために仕事をしたかを知る必要があります。これは、費用を医師に割り当てるためです。

例:
私は働いていDoctor 6 (id=6)て、技術者は 1 日あたり 100 ドルを受け取ります。
5 日に彼は医師 6 だけのために働くので、医師 6 の費用は 100 ドルです。
6 日に彼は医師 6 と 8 のために働くので、医師 6 の費用は 50 ドルになります。
7 日に彼は医師 6、7、8 のために働くので、医師 6 の費用は 33.33 ドルになります。
この期間の医師の総費用は $183.33 です。

これが十分に明確であることを願っています.SQLがこれを解決できることを願っています.
前もって感謝します!

2013-03-05  6   16
2013-03-06  6   16
2013-03-06  8   16
2013-03-07  6   16
2013-03-07  8   16
2013-03-07  10  16

私が持っているオプションは、医師の ID と技術者 ID を含むレコードを選択し、レコードセットの日付を PHP ループを使用して、その技術者がその日付に取り組んでいた他の医師がいるかどうかを確認することです。これは長い道のりのようですが、唯一の解決策かもしれません。

4

1 に答える 1

1

サブクエリで医師の数を計算し、結果を結合して戻します。

select dos, technician_id, dt.numdocs
from t left outer join
     (select dos, technician_id, count(distinct ref_doctor_id) as numdocs
      from t
      group by dos, technician_id
     ) dt
     on dt.dos = t.dos and dt.technician_id = t.technician_id
where ref_doctor_id = 6
group by dos, technician_id
于 2013-03-24T13:32:28.593 に答える