J'ai une table dont je veux obtenir la dernière entrée pour chaque groupe. Voici le tableau:
DocumentStatusLogs
Table
|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 |
Le tableau sera regroupé par DocumentID
et trié par DateCreated
ordre décroissant. Pour chacun DocumentID
, je veux obtenir le dernier statut.
Ma sortie préférée:
| DocumentID | Status | DateCreated |
| 1 | S1 | 8/02/2011 |
| 2 | S3 | 8/01/2011 |
| 3 | S1 | 8/02/2011 |
Existe-t-il une fonction d'agrégation pour obtenir uniquement le sommet de chaque groupe? Voir le pseudo-code
GetOnlyTheTop
ci - dessous:SELECT DocumentID, GetOnlyTheTop(Status), GetOnlyTheTop(DateCreated) FROM DocumentStatusLogs GROUP BY DocumentID ORDER BY DateCreated DESC
Si une telle fonction n'existe pas, existe-t-il un moyen d'obtenir la sortie souhaitée?
- Ou en premier lieu, cela pourrait-il être causé par une base de données non normalisée? Je pense, puisque ce que je recherche, c'est juste une rangée, si cela
status
également être situé dans la table parent?
Veuillez consulter le tableau parent pour plus d'informations:
Documents
Tableau actuel
| DocumentID | Title | Content | DateCreated |
| 1 | TitleA | ... | ... |
| 2 | TitleB | ... | ... |
| 3 | TitleC | ... | ... |
La table parent doit-elle être ainsi pour que je puisse facilement accéder à son état?
| DocumentID | Title | Content | DateCreated | CurrentStatus |
| 1 | TitleA | ... | ... | s1 |
| 2 | TitleB | ... | ... | s3 |
| 3 | TitleC | ... | ... | s1 |
MISE À JOUR Je viens d'apprendre à utiliser "appliquer", ce qui facilite la résolution de ces problèmes.