MySQL Query ข้อมูลล่าสุดรายการละ 1 แถว เรียงลำดับตามคอลัมน์มากกว่า 1 คอลัมน์
ดูตัวอย่างข้อมูลตามตารางด้านล่าง
SELECT ID, Name, Age
FROM your_table
WHERE Name = 'Jane'
ORDER BY Age DESC, ID DESC
LIMIT 1;
จากตัวอย่าง Jane จะมี 2 รายการ Age เท่ากัน ดังนั้น ID ล่าสุดก็คือ 4 ผลลัพท์ดังตาราง
SELECT t1.ID, t1.Name, t1.Age
FROM your_table t1
LEFT JOIN your_table t2 ON t1.Name = t2.Name AND (t1.Age < t2.Age OR (t1.Age = t2.Age AND t1.ID < t2.ID))
WHERE t2.ID IS NULL;
อธิบายบรรทัด JOIN นะครับ
- ขั้นแรกจะมีการจับคู่แถวที่มี Name เดียวกันก่อน (t1.Name = t2.Name)
- และตรวจสอบว่าเป็นแถวที่มี Age น้อยกว่าหรือไม่ (t1.Age < t2.Age) ถ้าใช่ ก็คืนค่าแถวนั้น
- ในกรณีที่ Age เท่ากัน จะไปตรวจว่า ID น้อยกว่ากันหรือไม่ ถ้าใช่ ก็คืนค่าแถวนั้นเช่นกัน
- แถวที่เป็นรายการที่ Age และ ID มากที่สุดจะคืนค่า NULL (เพราะจับคู่กับใครไม่ได้ เนื่องจากไม่เข้าเงื่อนไขใน ON)
SELECT t1.ID, t1.Name, t1.Age
FROM your_table t1
LEFT JOIN your_table t2 ON t1.Name = t2.Name AND (t1.Age > t2.Age OR (t1.Age = t2.Age AND t1.ID > t2.ID))
WHERE t2.ID IS NULL;
ได้ผลลัพท์ดังตาราง