Ich habe ein kleines Problem mit meinem erforderlichen Ergebnis in mysql.Verknüpfen von zwei Mysql-Tabellen und Gruppieren von Spalten
Ich habe zwei Tabellen wie folgt (nur die relevanten Spalten enthalten sind):
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
)
Mein Problem ist, ein Ergebnis zu erhalten, die eine Tabelle mit den Fahrzeug und Datumsspalten Gruppierung zurückgibt, während auch eine Summe des Gebens die beiden anderen fuel_amount Spalten wie folgt:
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
die Verwendung zu sehen wäre, die fuel_amount Spalten in jeder Tabelle für ein bestimmtes Fahrzeug und Datum zu vergleichen, ob es irgendwelche Unterschiede waren und den Benutzer alarmieren. Das würde in PHP gemacht werden, ist aber nicht Gegenstand dieser Frage.
Außerdem müsste ich die Einträge zurückgegeben haben, so dass es innerhalb eines Datumsbereichs + der letzte Eintrag des vorherigen Monats sein muss. (Ich habe bereits den Monat, Berechnung im Vormonat), ich weiß nur nicht, wie ich es in die Abfrage aufnehmen soll.
Ich dachte, der Verwendung einer WHERE-Klausel, so dass:
WHERE Datum < = end_date und Datum> = start_date
Aber ich scheine ein Problem haben nur den letzten Eintrag mit der Auswahl vom letzten Monat. Hier
ist das, was ich bisher:
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
Es kann sein, dass ich das von einem sehr schlechten Winkel am nähern, also, wenn Sie irgendwelche Vorschläge haben einen viel besseren und einfacheren Ansatz zu verwenden, würde ich Sei sehr froh.
Vielen Dank für Ihre Hilfe im Voraus.
pat
Siehe http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-y-simple- SQL-Abfrage – Strawberry