У мене є таблиця, в якій я хочу отримати останню запис для кожної групи. Ось таблиця:
DocumentStatusLogs
Таблиця
|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 |
Таблиця буде групуватися DocumentID
та сортуватись DateCreated
у порядку зменшення. Для кожного DocumentID
я хочу отримати останній статус.
Мій бажаний вихід:
| DocumentID | Status | DateCreated |
| 1 | S1 | 8/02/2011 |
| 2 | S3 | 8/01/2011 |
| 3 | S1 | 8/02/2011 |
Чи є якась сукупна функція, щоб отримати лише верх від кожної групи? Дивіться псевдо-код
GetOnlyTheTop
нижче:SELECT DocumentID, GetOnlyTheTop(Status), GetOnlyTheTop(DateCreated) FROM DocumentStatusLogs GROUP BY DocumentID ORDER BY DateCreated DESC
Якщо такої функції не існує, чи можна досягти потрібного результату?
- Або, по-перше, це може бути викликано ненормалізованою базою даних? Я думаю, оскільки те, що я шукаю, - це лише один ряд, чи повинен він
status
також розташовуватися в батьківській таблиці?
Будь ласка, дивіться батьківську таблицю для отримання додаткової інформації:
Поточна Documents
таблиця
| DocumentID | Title | Content | DateCreated |
| 1 | TitleA | ... | ... |
| 2 | TitleB | ... | ... |
| 3 | TitleC | ... | ... |
Чи повинна така батьківська таблиця бути такою, щоб я міг легко отримати доступ до її статусу?
| DocumentID | Title | Content | DateCreated | CurrentStatus |
| 1 | TitleA | ... | ... | s1 |
| 2 | TitleB | ... | ... | s3 |
| 3 | TitleC | ... | ... | s1 |
ОНОВЛЕННЯ Я щойно навчився використовувати "застосувати", що полегшує вирішення таких проблем.