การดึงแถวที่มี ID สูงสุดด้วย ORDER BY DESC และ LIMIT 1
วิธีที่ง่ายและมาตรฐานที่สุด: เรียงลำดับ ID จากมากไปน้อย (DESC) แล้วจำกัด 1 แถว (LIMIT 1)
รูปแบบคำสั่ง
SELECT * FROM table_name ORDER BY id_column DESC LIMIT 1;
ตัวอย่าง: ดึงแถวที่ Id สูงสุด
1. สร้างตารางและเพิ่มข้อมูล
CREATE TABLE DemoTable (Id INT, FirstName VARCHAR(50));
INSERT INTO DemoTable VALUES (100, 'Chris'), (110, 'Robert'), (120, 'Mike'), (115, 'Bob');
2. ดูข้อมูลทั้งหมด
SELECT * FROM DemoTable;
ผลลัพธ์:
+------+-----------+
| Id | FirstName |
+------+-----------+
| 100 | Chris |
| 110 | Robert |
| 120 | Mike |
| 115 | Bob |
+------+-----------+
3. ดึงแถว ID สูงสุด
SELECT * FROM DemoTable ORDER BY Id DESC LIMIT 1;
ผลลัพธ์:
+------+-----------+
| Id | FirstName |
+------+-----------+
| 120 | Mike |
+------+-----------+
วิธีอื่นๆ และการเปรียบเทียบ
| วิธี | คำสั่ง | ข้อดี/ข้อเสีย |
|---|---|---|
| ORDER BY DESC LIMIT 1 | SELECT * FROM t ORDER BY id DESC LIMIT 1 | มาตรฐาน, ใช้ Index ได้, อ่านง่าย |
| Subquery MAX | SELECT * FROM t WHERE id = (SELECT MAX(id) FROM t) | ชัดเจน, 2 Pass (หา MAX แล้วหาแถว) |
| JOIN กับ MAX | SELECT t.* FROM t JOIN (SELECT MAX(id) AS m FROM t) m ON t.id = m.m | ซับซ้อนเกินไป |
| Window Function (MySQL 8.0+) | SELECT * FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY id DESC) rn FROM t) x WHERE rn = 1 | ยืดหยุ่น สำหรับ Top-N per Group |