ฉันมีตารางที่ฉันต้องการรับรายการล่าสุดสำหรับแต่ละกลุ่ม นี่คือตาราง:
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 |
อัปเดต ฉันเพิ่งเรียนรู้วิธีใช้ "ใช้" ซึ่งทำให้ง่ายต่อการแก้ไขปัญหาดังกล่าว