Tôi có một bảng mà tôi muốn nhận mục mới nhất cho mỗi nhóm. Đây là bảng:
DocumentStatusLogs
Bàn
|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 |
Bảng sẽ được nhóm theo DocumentID
và sắp xếp theo DateCreated
thứ tự giảm dần. Đối với mỗi DocumentID
, tôi muốn có được trạng thái mới nhất.
Đầu ra ưa thích của tôi:
| DocumentID | Status | DateCreated |
| 1 | S1 | 8/02/2011 |
| 2 | S3 | 8/01/2011 |
| 3 | S1 | 8/02/2011 |
Có bất kỳ chức năng tổng hợp để chỉ nhận đầu từ mỗi nhóm? Xem mã giả
GetOnlyTheTop
dưới đây:SELECT DocumentID, GetOnlyTheTop(Status), GetOnlyTheTop(DateCreated) FROM DocumentStatusLogs GROUP BY DocumentID ORDER BY DateCreated DESC
Nếu chức năng đó không tồn tại, có cách nào tôi có thể đạt được đầu ra tôi muốn không?
- Hoặc tại nơi đầu tiên, điều này có thể được gây ra bởi cơ sở dữ liệu không chuẩn hóa? Tôi đang nghĩ, vì những gì tôi đang tìm kiếm chỉ là một hàng, nên nó
status
cũng được đặt trong bảng cha mẹ?
Vui lòng xem bảng cha để biết thêm thông tin:
Documents
Bảng hiện tại
| DocumentID | Title | Content | DateCreated |
| 1 | TitleA | ... | ... |
| 2 | TitleB | ... | ... |
| 3 | TitleC | ... | ... |
Bảng cha có nên như thế này để tôi có thể dễ dàng truy cập trạng thái của nó không?
| DocumentID | Title | Content | DateCreated | CurrentStatus |
| 1 | TitleA | ... | ... | s1 |
| 2 | TitleB | ... | ... | s3 |
| 3 | TitleC | ... | ... | s1 |
CẬP NHẬT Tôi mới học cách sử dụng "ứng dụng" giúp giải quyết các vấn đề như vậy dễ dàng hơn.