Ho una tabella che desidero ottenere l'ultima voce per ciascun gruppo. Ecco la tabella:
DocumentStatusLogs
tavolo
|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 |
La tabella verrà raggruppata DocumentID
e ordinata DateCreated
in ordine decrescente. Per ciascuno DocumentID
, voglio ottenere lo stato più recente.
La mia uscita preferita:
| DocumentID | Status | DateCreated |
| 1 | S1 | 8/02/2011 |
| 2 | S3 | 8/01/2011 |
| 3 | S1 | 8/02/2011 |
Esiste una funzione aggregata per ottenere solo il massimo da ciascun gruppo? Vedi pseudo-codice di
GetOnlyTheTop
seguito:SELECT DocumentID, GetOnlyTheTop(Status), GetOnlyTheTop(DateCreated) FROM DocumentStatusLogs GROUP BY DocumentID ORDER BY DateCreated DESC
Se tale funzione non esiste, è possibile ottenere l'output desiderato?
- O in primo luogo, ciò potrebbe essere causato da un database non normalizzato? Sto pensando, poiché quello che sto cercando è solo una riga, dovrebbe
status
trovarsi anche nella tabella padre?
Per ulteriori informazioni, consultare la tabella principale:
Documents
Tabella corrente
| DocumentID | Title | Content | DateCreated |
| 1 | TitleA | ... | ... |
| 2 | TitleB | ... | ... |
| 3 | TitleC | ... | ... |
La tabella padre dovrebbe essere così in modo che io possa accedere facilmente al suo stato?
| DocumentID | Title | Content | DateCreated | CurrentStatus |
| 1 | TitleA | ... | ... | s1 |
| 2 | TitleB | ... | ... | s3 |
| 3 | TitleC | ... | ... | s1 |
AGGIORNAMENTO Ho appena imparato a usare "applica" che semplifica la risoluzione di tali problemi.