私はmysqlで必要な結果を得るのに少し問題があります。2つのMysqlテーブルに結合してカラムをグループ化する
次のように私は(唯一の関連する列が含まれている)2つのテーブルを持っている:
CREATE TABLE vehicle_log
(id int(11) NOT NULL
,date date NOT NULL
,fuel_taken varchar(40) NOT NULL
,vehicle varchar(6) NOT NULL)
CREATE TABLE fuel_log
(id int(11) NOT NULL
,date date NOT NULL
,fuel_taken varchar(40) NOT NULL
,vehicle varchar(6) NOT NULL
)
私の問題は、車両や日付の列をグループ化テーブルを返す結果を得ることです、またの合計を与えながら、そのような他の二つのfuel_amountの列:
date vehicle fuel_by_receipt fuel_by_log
2016-01-01 KKK222 150 NULL
2016-01-01 KKK252 100 150
2016-01-31 KKK222 120 NULL
2016-02-10 KKK252 100 NULL
2016-02-15 KKK252 50 NULL
2016-11-10 KKK252 20 NULL
2016-11-17 KKK252 10 NULL
2016-01-31 KKK252 NULL 90
使用量は任意の違いがあったかどうかを確認し、ユーザーに警告するために、特定の車両と日付の各テーブルにfuel_amount列を比較することであろう。これはPHPで行われますが、この質問の対象ではありません。
また、日付範囲+前月の最後のエントリになるようにエントリを返す必要があります。 (私はすでに月、前月計算している)、私はちょうどそれをクエリに含める方法がわかりません。
ように、私はWHERE句を使用して考えていた:私は最後のエントリを選択すると、問題を持っているように見える
日< = END_DATEと日付> = start_dateの
しかし、先月から。ここで
は、私がこれまで持っているものです。
SELECT f.date
, f.vehicle
, SUM(f.fuel_taken) fuel_by_receipt
, SUM(v.fuel_taken) fuel_by_log
FROM fuel_log f
LEFT
JOIN vehicle_log v
ON v.vehicle = f.vehicle
AND v.date = f.date
GROUP
BY f.date
, f.vehicle
, v.date #<-- THIS LINE IS REDUNDANT
, v.vehicle #<-- AND SO IS THIS
UNION
SELECT f.date
, f.vehicle
, SUM(f.fuel_taken) fuel_by_receipt
, SUM(v.fuel_taken) fuel_by_log
FROM fuel_log f
RIGHT #<-- NOBODY EVER USES RIGHT JOIN
JOIN vehicle_log v
ON v.vehicle = f.vehicle
AND v.date = f.date
GROUP
BY f.date
, f.vehicle
, v.date #<- THIS IS REDUNDANT
, v.vehicle #<- AND SO IS THIS
あなたはより良い、より簡単なアプローチを使用するための任意の提案を持っているので、もしそれが、私は非常に悪い角度からこれを近づいていますということであってもよいし、私はでしょうとても嬉しいです。
ご協力いただきありがとうございます。
pat
http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple- SQLクエリ – Strawberry