Code: Alles auswählen
SELECT tb1.*,
tb2.*
FROM tabelle1 tb1
LEFT JOIN tabelle2 tb2 ON tb2.idtb1 = tb1.id
Wie macht man sowas?
Moderator: Moderatoren
Code: Alles auswählen
SELECT tb1.*,
tb2.*
FROM tabelle1 tb1
LEFT JOIN tabelle2 tb2 ON tb2.idtb1 = tb1.id
Das ist tricky, versuchs mal damit, aber es hängt vom Datenvolumen ab, ob das noch performant ist.Es soll aber immer nur der letzte Eintrag genommen werden,
Code: Alles auswählen
SELECT tb1.*,
tb2.*
FROM tabelle1 tb1
LEFT JOIN tabelle2 tb2 ON tb2.idtb1 = tb1.id and tb2.<maxfield> = (select max(<maxfield>) from tabelle2 t where t.idtb1 = tb2.tbid1)
Code: Alles auswählen
SELECT tb1.*,
tb2.*
FROM tabelle1 tb1
LEFT JOIN (select *
from tabelle2
where rowid in
(select max(rowid)
from tabelle2
group by idtb1, <maxfield>) tb2 ON tb2.idtb1 = tb1.id
Code: Alles auswählen
SELECT td.id,
td.checkin,
td.datum,
td.idfahrer,
td.name,
td.nummer,
td.dienstbez,
td.zeitvon,
td.gueltigbez,
td.usertime,
ba.kuerzel,
ezd.kfznr,
ezd.breitengrad,
ezd.laengengrad,
ezd.linienname,
ezd.letztekommunikation,
ezd.fahrtname,
fa.mobil,
fz.datumtank,
fz.tankmenge,
re.datumbis
FROM tagesdienst td
left join gemeinsamedaten.fahrer fa on fa.id = td.idfahrer
LEFT JOIN betriebshof ba ON ba.id = td.idhofab
left Join gemeinsamedaten.echtzeitdaten ezd on ezd.nummer = fa.nummer
LEFT JOIN fahrzeuge fz on fz.kfznr=ezd.kfznr
left join reinigung re on re.idfahrzeug=fz.id <---- das hier liefert mir zu viel zurück. Ich bräuchte nur 1 Satz und zwar den jüngsten Eintrag
WHERE td.datum = '2024-01-16' AND td.webfrei
ORDER BY td.dienstbez, re.datumbis DESC
Code: Alles auswählen
SELECT td.id,
td.checkin,
td.datum,
td.idfahrer,
td.name,
td.nummer,
td.dienstbez,
td.zeitvon,
td.gueltigbez,
td.usertime,
ba.kuerzel,
ezd.kfznr,
ezd.breitengrad,
ezd.laengengrad,
ezd.linienname,
ezd.letztekommunikation,
ezd.fahrtname,
fa.mobil,
fz.datumtank,
fz.tankmenge,
re.datumbis
FROM tagesdienst td
left join gemeinsamedaten.fahrer fa on fa.id = td.idfahrer
LEFT JOIN betriebshof ba ON ba.id = td.idhofab
left Join gemeinsamedaten.echtzeitdaten ezd on ezd.nummer = fa.nummer
LEFT JOIN fahrzeuge fz on fz.kfznr=ezd.kfznr
// z.B. je IDFahrzeug das max Datum, ergibt dann einen Satz, von der Annahme ausgehend, dass der letzte Satz das neueset Datum enthält
left join (select idfahrzeug, max(datumbis) datumbis from reinigung group by 1 ) re on re.idfahrzeug=fz.id
<---- das hier liefert mir zu viel zurück. Ich bräuchte nur 1 Satz und zwar den jüngsten Eintrag
WHERE td.datum = '2024-01-16' AND td.webfrei
ORDER BY td.dienstbez, re.datumbis DESC
Code: Alles auswählen
SELECT td.id,
td.checkin,
td.datum,
td.idfahrer,
td.name,
td.nummer,
td.dienstbez,
td.zeitvon,
td.gueltigbez,
td.usertime,
ba.kuerzel,
ezd.kfznr,
ezd.breitengrad,
ezd.laengengrad,
ezd.linienname,
ezd.letztekommunikation,
ezd.fahrtname,
fa.mobil,
fz.datumtank,
fz.tankmenge,
re.datumbis
FROM tagesdienst td
left join gemeinsamedaten.fahrer fa on fa.id = td.idfahrer
LEFT JOIN betriebshof ba ON ba.id = td.idhofab
left Join gemeinsamedaten.echtzeitdaten ezd on ezd.nummer = fa.nummer
LEFT JOIN fahrzeuge fz on fz.kfznr=ezd.kfznr
// z.B. je IDFahrzeug das max Datum, ergibt dann einen Satz, von der Annahme ausgehend, dass der letzte Satz das neueset Datum enthält
left join (select * from reinigung where rowid in (select max(rowid) from reinigung group by idfahrzeug )) re on re.idfahrzeug=fz.id
<---- das hier liefert mir zu viel zurück. Ich bräuchte nur 1 Satz und zwar den jüngsten Eintrag
WHERE td.datum = '2024-01-16' AND td.webfrei
ORDER BY td.dienstbez, re.datumbis DESC
wie identifizierst Du den jüngsten Eintrag?left join reinigung re on re.idfahrzeug=fz.id
<---- das hier liefert mir zu viel zurück. Ich bräuchte nur 1 Satz und zwar den jüngsten Eintrag
Code: Alles auswählen
SELECT fz.kfznr,
re.datumbis,
re.id,
SubString(re.zeitbis,1,5) AS zeitbis,
SubString(re.zeitvon,1,5) AS zeitvon,
fa.name,
fa.vorname
FROM fahrzeuge fz
left join (select * from reinigung where rowid in (select max(rowid) from reinigung group by idfahrzeug )) re on re.idfahrzeug=fz.id
left Join fahrer fa on fa.nummer = re.nummer
where fz.kfznr = 40
Code: Alles auswählen
SELECT fz.kfznr,
re.datumbis,
re.id,
SubString(re.zeitbis,1,5) AS zeitbis,
SubString(re.zeitvon,1,5) AS zeitvon,
fa.name,
fa.vorname
FROM fahrzeuge fz
left join (select * from reinigung where id in (select max(id) from reinigung group by idfahrzeug )) re on re.idfahrzeug=fz.id
left Join fahrer fa on fa.nummer = re.nummer
where fz.kfznr = 40