Eu tenho uma tabela na qual quero obter a entrada mais recente para cada grupo. Aqui está a tabela:
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 |
A tabela será agrupada DocumentID
e classificada por DateCreated
ordem decrescente. Para cada um DocumentID
, quero obter o status mais recente.
Minha saída preferida:
| DocumentID | Status | DateCreated |
| 1 | S1 | 8/02/2011 |
| 2 | S3 | 8/01/2011 |
| 3 | S1 | 8/02/2011 |
Existe alguma função agregada para obter apenas o topo de cada grupo? Veja pseudo-código
GetOnlyTheTop
abaixo:SELECT DocumentID, GetOnlyTheTop(Status), GetOnlyTheTop(DateCreated) FROM DocumentStatusLogs GROUP BY DocumentID ORDER BY DateCreated DESC
Se essa função não existir, existe alguma maneira de obter a saída desejada?
- Ou, em primeiro lugar, isso poderia ser causado por banco de dados não normalizado? Estou pensando, já que o que estou procurando é apenas uma linha, isso
status
também deve estar localizado na tabela pai?
Consulte a tabela pai para obter mais informações:
Documents
Tabela Atual
| DocumentID | Title | Content | DateCreated |
| 1 | TitleA | ... | ... |
| 2 | TitleB | ... | ... |
| 3 | TitleC | ... | ... |
A tabela pai deve ser assim para que eu possa acessar facilmente seu status?
| DocumentID | Title | Content | DateCreated | CurrentStatus |
| 1 | TitleA | ... | ... | s1 |
| 2 | TitleB | ... | ... | s3 |
| 3 | TitleC | ... | ... | s1 |
ATUALIZAÇÃO Acabei de aprender a usar "aplicar", o que facilita a solução desses problemas.