Tengo una tabla en la que quiero obtener la última entrada para cada grupo. Aquí está la tabla:
DocumentStatusLogs Mesa
|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 tabla se agrupará DocumentIDy ordenará por DateCreatedorden descendente. Para cada uno DocumentID, quiero obtener el último estado.
Mi salida preferida:
| DocumentID | Status | DateCreated |
| 1 | S1 | 8/02/2011 |
| 2 | S3 | 8/01/2011 |
| 3 | S1 | 8/02/2011 |
¿Hay alguna función agregada para obtener solo la parte superior de cada grupo? Ver pseudocódigo a
GetOnlyTheTopcontinuación:SELECT DocumentID, GetOnlyTheTop(Status), GetOnlyTheTop(DateCreated) FROM DocumentStatusLogs GROUP BY DocumentID ORDER BY DateCreated DESCSi tal función no existe, ¿hay alguna forma de lograr el resultado que quiero?
- O, en primer lugar, ¿podría ser esto causado por una base de datos no normalizada? Estoy pensando, ya que lo que estoy buscando es solo una fila, ¿debería
statusestar también ubicado en la tabla principal?
Consulte la tabla principal para obtener más información:
DocumentsTabla actual
| DocumentID | Title | Content | DateCreated |
| 1 | TitleA | ... | ... |
| 2 | TitleB | ... | ... |
| 3 | TitleC | ... | ... |
¿La tabla principal debería ser así para poder acceder fácilmente a su estado?
| DocumentID | Title | Content | DateCreated | CurrentStatus |
| 1 | TitleA | ... | ... | s1 |
| 2 | TitleB | ... | ... | s3 |
| 3 | TitleC | ... | ... | s1 |
ACTUALIZACIÓN Acabo de aprender a usar "aplicar", lo que hace que sea más fácil abordar tales problemas.