Ich habe eine Tabelle, an der ich für jede Gruppe den neuesten Eintrag erhalten möchte. Hier ist die Tabelle:
DocumentStatusLogs
Tabelle
|ID| DocumentID | Status | DateCreated |
| 2| 1 | S1 | 7/29/2011 |
| 3| 1 | S2 | 7/30/2011 |
| 6| 1 | S1 | 8/02/2011 |
| 1| 2 | S1 | 7/28/2011 |
| 4| 2 | S2 | 7/30/2011 |
| 5| 2 | S3 | 8/01/2011 |
| 6| 3 | S1 | 8/02/2011 |
Die Tabelle wird DocumentID
nach DateCreated
absteigender Reihenfolge gruppiert und sortiert . Für jeden DocumentID
möchte ich den neuesten Status erhalten.
Meine bevorzugte Ausgabe:
| DocumentID | Status | DateCreated |
| 1 | S1 | 8/02/2011 |
| 2 | S3 | 8/01/2011 |
| 3 | S1 | 8/02/2011 |
Gibt es eine Aggregatfunktion, um von jeder Gruppe nur die Spitze zu erhalten? Siehe Pseudocode
GetOnlyTheTop
unten:SELECT DocumentID, GetOnlyTheTop(Status), GetOnlyTheTop(DateCreated) FROM DocumentStatusLogs GROUP BY DocumentID ORDER BY DateCreated DESC
Wenn eine solche Funktion nicht vorhanden ist, kann ich auf irgendeine Weise die gewünschte Ausgabe erzielen?
- Oder könnte dies in erster Linie durch eine nicht normalisierte Datenbank verursacht werden? Ich denke, da ich nur eine Zeile suche, sollte sich diese
status
auch in der übergeordneten Tabelle befinden?
Weitere Informationen finden Sie in der übergeordneten Tabelle:
Aktuelle Documents
Tabelle
| DocumentID | Title | Content | DateCreated |
| 1 | TitleA | ... | ... |
| 2 | TitleB | ... | ... |
| 3 | TitleC | ... | ... |
Sollte die übergeordnete Tabelle so sein, damit ich leicht auf ihren Status zugreifen kann?
| DocumentID | Title | Content | DateCreated | CurrentStatus |
| 1 | TitleA | ... | ... | s1 |
| 2 | TitleB | ... | ... | s3 |
| 3 | TitleC | ... | ... | s1 |
UPDATE Ich habe gerade gelernt, wie man "anwenden" verwendet, was es einfacher macht, solche Probleme anzugehen.