私は現在、2つのサブクエリを含む複数のテーブルのデータを結合する非常に面倒なクエリを持っています。このデータをグループ化する必要があります(DAY()
、WEEK()
、MONTH()
、QUARTER()
)。複数の結合を持つ日付範囲によるMySQLのグループ化
私は3つのテーブル:days
,qos
およびemployees
を持っています。 employee
は自明のものであり、day
は特定の日の従業員のパフォーマンスの要約であり、qos
はランダム品質検査であり、1日に何度も実行できます。
瞬間、私はうまく機能しているすべてのemployees
、およびLEFT JOIN
day
とqos
をINGのを、選択しています。しかし、今では、データをグループ化して、チームや個人のパフォーマンスをある期間にわたって分類する必要があります。このデータを取る
:
従業員
id | name
------------------
1 | Bob Smith
日
id | employee_id | day_date | calls_taken
---------------------------------------------
1 | 1 | 2011-03-01 | 41
2 | 1 | 2011-03-02 | 24
3 | 1 | 2011-04-01 | 35
のQoS
私はDAY()
によってグループ化によって開始した場合
、私は以下の結果を確認する必要があります:
Day__date | Day__Employee__id | Day__calls | Day__qos_score
------------------------------------------------------------
2011-03-01 | 1 | 41 | NULL
2011-03-02 | 1 | 24 | NULL
2011-03-03 | 1 | NULL | 90
2011-04-01 | 1 | 35 | 91
を見ての通り、Day__calls
はSUM(calls_taken)
とDay__qos_score
がAVG(score)
であるべきです。上記と同様の方法を試しましたが、テーブルの1つが結合されるまで日付がわからないため、day
が保存されているレコードのみが表示されます。
これを行う方法はありますか、それとも間違っているのでしょうか?
編集:要望どおり、これまでのところ私が思いついたことがあります。ただし、日付はday
の場合のみ表示されます。
SELECT COALESCE(`day`.day_date, qos.qos_date) AS Day__date,
employee.id AS Day__Employee__id,
`day`.calls_taken AS Day__Day__calls,
qos.score AS Day__Qos__score
FROM faults_employees `employee`
LEFT JOIN (SELECT `day`.employee_id AS employee_id,
SUM(`day`.calls_taken) AS `calls_in`,
FROM faults_days AS `day`
WHERE employee.id = 7
GROUP BY (`day`.day_date)
) AS `day`
ON `day`.employee_id = `employee`.id
LEFT JOIN (SELECT `qos`.employee_id AS employee_id,
AVG(qos.score) AS `score`
FROM faults_qos qos
WHERE employee.id = 7
GROUP BY (qos.qos_date)
) AS `qos`
ON `qos`.employee_id = `employee`.id AND `qos`.qos_date = `day`.day_date
WHERE employee.id = 7
GROUP BY Day__date
ORDER BY `day`.day_date ASC
質問を投稿できますか? –
@Christian私は現在のクエリを追加しました –