Saya memiliki tabel yang ingin saya dapatkan entri terbaru untuk setiap grup. Ini tabelnya:
DocumentStatusLogs
Meja
|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 |
Tabel akan dikelompokkan berdasarkan DocumentID
dan diurutkan berdasarkan DateCreated
urutan menurun. Untuk masing-masing DocumentID
, saya ingin mendapatkan status terbaru.
Output pilihan saya:
| DocumentID | Status | DateCreated |
| 1 | S1 | 8/02/2011 |
| 2 | S3 | 8/01/2011 |
| 3 | S1 | 8/02/2011 |
Apakah ada fungsi agregat untuk mendapatkan yang teratas dari setiap grup? Lihat pseudo-code di
GetOnlyTheTop
bawah ini:SELECT DocumentID, GetOnlyTheTop(Status), GetOnlyTheTop(DateCreated) FROM DocumentStatusLogs GROUP BY DocumentID ORDER BY DateCreated DESC
Jika fungsi seperti itu tidak ada, apakah ada cara saya dapat mencapai output yang saya inginkan?
- Atau pertama-tama, bisakah ini disebabkan oleh database yang tidak dinormalisasi? Saya berpikir, karena apa yang saya cari hanya satu baris, haruskah itu
status
juga terletak di tabel induk?
Silakan lihat tabel induk untuk informasi lebih lanjut:
Documents
Tabel Saat Ini
| DocumentID | Title | Content | DateCreated |
| 1 | TitleA | ... | ... |
| 2 | TitleB | ... | ... |
| 3 | TitleC | ... | ... |
Haruskah tabel induk seperti ini sehingga saya dapat dengan mudah mengakses statusnya?
| DocumentID | Title | Content | DateCreated | CurrentStatus |
| 1 | TitleA | ... | ... | s1 |
| 2 | TitleB | ... | ... | s3 |
| 3 | TitleC | ... | ... | s1 |
PEMBARUAN Saya baru belajar cara menggunakan "berlaku" yang membuatnya lebih mudah untuk mengatasi masalah seperti itu.