Hallo zusammen,
da ich mich nach langer langer langer Zeit mal wieder mit SQL beschäftigen muss, habe ich mal eine Frage an euch.
Ich habe eine große Datenbank, as der ich allerdings für meine Abfrage nur 4 Tabellen benötige. request, request_history und business-areas.
Ich benötige folgende Daten:
request: rq_id, fk_ba_id
request_history: die höchste hist_id zum jeweiligen fremdschlüssel fk_rq_id und den zur jewilig höchsten hist_id gehörenden fk_rqs_id
business-areas: den namen der über den fremdschlüssel fk_ba_id aus request verknüpft ist.
Ich möchte also zu einer Anfrage wissen welchem unternehmensbereich sie zugeornet ist, und den aktuellen Status den sie hat. Dazu benötige ich den letzten (höchsten) history-Eintrag und den daraus resultierenden fk_rqs_id.
Zur Zeit versuche ich es so:
SELECT MAX(public.request_history.hist_id), public.request.rq_id, public.business_areas.name, MAX(public.request_history.fk_rqs_id) AS "fk_rqs_id"
FROM ((public.request
INNER JOIN public.business_areas ON public.business_areas.ba_id = public.request.fk_ba_id)
INNER JOIN public.request_history ON public.request_history.fk_rq_id = public.request.rq_id)
WHERE public.request.deleted = false
GROUP BY public.request.rq_id, public.business_areas.name
ORDER BY public.request.rq_id
Ich bekomme FAST die geünschten Ergebnisse. Außer dass ich immer den maximalen Status bekomme, wenn sich der Wert des Status allerdings von 5, auf 4 geändert hat, bekomme ich trotzdem 5. Lasse ich das MAX weg, muss ich den Status in die GROUP BY anweisung nehmen. Dadurch erhalte ich aber jeden Status den eine ANfrage hatte einmal.
Wie bekomme ich es hin, dass ich nur den fk_rqs_id bekomme, der zur höchsten history_id gehört?
Sorry, falls ich mich umständlich ausgedrückt habe. Aber bei Fragen zu meiner Frage helfe ich gerne weiter!
Grüße
Sandro