2017-01-27 20 views
0

私は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

+0

http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple- SQLクエリ – Strawberry

答えて

0

2つのテーブルの日付の車両の組み合わせを比較することに興味があります。したがって、最初にSUMのグループ化された日付と車両をグループ化し、グループ化された日付車両SUMSに参加させる必要があります。だから最初にテーブルの個々のレコードではなく、グループ化されたSUMに参加してください。

これを行う前に、まず、すべての可能なデータと車両の組み合わせを取得する必要があります(UNION内の両方のテーブルの車両の日付とDISTINCTを適用することによって)。上記の操作の結果を日付/車両のフィールドにこのテーブルでジョインする。 これがあなたにインスピレーションを与えてくれることを願っています!

関連する問題