Hejsa
Jeg har en database, hvor jeg ønsker at finde den sidste hændelse på
tværs af 2 tabeller, hvor status er forskellig fra 'Completed'.
Tabel 1 indeholder en række ID'er (foreign keys fra forskellige
tabeller), hvoraf jeg skal bruge det ene længere henne i processen, og
tabel 2 indeholder resten - herunder det dato-felt som fortæller,
hvornår hvert enkelt event har fundet sted. Der er et antal events pr. ID.
Foreløbig har jeg (indtil andet er bevist) fået løst opgaven ved at
oprette et view, som indeholder par af ID og sidste dato for events i
gruppen bestemt af ID:
SELECT t1.id, <de andre ID'er fra tabel_1>, max( t2.scheduled_start )
FROM tabel_1 t1
INNER JOIN tabel_2 t2 ON t1.id = t2.id
WHERE t2.status <> 'Completed'
GROUP BY t1.id
Lad dette view hedde v. Det vil indeholde rækker fra tabel_1 med et
dato-felt klistret i enden.
I andet trin kan jeg så i stedet for at bruge min oprindelige tabel_1
bruge viewet v, idet jeg ved, at v kun indeholder tupler, for hvilke
sidste status _ikke_ var 'Completed'.
En select i stil med følgende:
SELECT *
FROM <tabeller INNER JOIN'et via ID'er fra v>
vil nu give mig alle events fra grupper (bestemt af t1.id) - dvs. alle
events fra grupper, hvor sidste status var forskellig fra 'Completed'.
Ovenstående virker vist - men kan det virkelig ikke gøres lidt smartere?
Jeg vil gerne undgå at skulle lave viewet - til gengæld gør det ikke
helt så meget, om query'en kører lynhurtigt, idet outputtet fra den
bliver smidt i en ny tabel, som så er den, der bliver brugt fra
interfacet (data opdateres hver morgen men er statisk i løbet af dagen).
Nogen ideer? (nogen som forstår min beskrivel? :)
--
Mvh.
/Thomas
|