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 DocumentIDdan diurutkan berdasarkan DateCreatedurutan 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
GetOnlyTheTopbawah ini:SELECT DocumentID, GetOnlyTheTop(Status), GetOnlyTheTop(DateCreated) FROM DocumentStatusLogs GROUP BY DocumentID ORDER BY DateCreated DESCJika 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
statusjuga terletak di tabel induk?
Silakan lihat tabel induk untuk informasi lebih lanjut:
DocumentsTabel 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.