Jag håller på med en SQL-fråga som ska hämta ut ett antal maskiner (bilar, mopeder, mfl) från en tabell. Dessa ska sedan matchas med en ägare och listas i en tabell.
Ungefär så här:
Namn Nuvarande ägare
NAO 903 Nisse
KEO 876 Olle
APA 123 Jörgen
Jag har tre tabeller; en maskintabell, en ägartabell och en relationstabell.
Relationstabellen innehåller förutom en relation till de vardera ägar- och maskintabellerna även ett start- och slutdatum för ägandet.
Min SQL-fråga ser ut så här:
SELECT
IFNULL(m.reg_nr, IFNULL(m.chassis_nr, IFNULL(m.serial_code, null))) AS name,
m.object_type, m.model, m.manufacturer, m.description, c.name AS current_owner, m.id
FROM machines m
LEFT JOIN machine_owners mo ON mo.machine_id=m.id AND mo.dt_end IS NULL
LEFT JOIN customers c ON c.id=mo.customer_id
GROUP BY m.id
ORDER BY name
Jag definerar en ägare som en relation med ett startdatum men inget slutdatum.
SQL-frågan fungerar prima i de flesta fall, men i vissa fall så kan det hända att det finns två ägare utan slutdatum (dt_end) i relationstabellen (handhavandefel t.ex). I så fall vill jag ha fram den senaste ägaren som finns med i relationen. I mitt fall får jag bara fram den första. Jag vill alltså i första hand ha fram den ägare som har senaste startdatumet (dt_start) och om det finns två med samma startdatum så ska den välja den med högst ID-nummer.
Hur kan jag göra för att lyckas med detta?
Jag använder MySQL 5.0