Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

วิธีดึงเฉพาะแถวที่มี ID สูงสุดใน MySQL

การดึงแถวที่มี 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      |
+------+-----------+

วิธีอื่นๆ และการเปรียบเทียบ

กรณี ID ไม่ได้เป็น Primary Key / มีค่าซ้ำ

-- หาก Id ซ้ำได้ และต้องการทุกแถวที่มี Max Id
SELECT * FROM DemoTable WHERE Id = (SELECT MAX(Id) FROM DemoTable);

ประสิทธิภาพ

  • หาก Id มี Index (PK/Unique) → ORDER BY Id DESC LIMIT 1 เร็วมาก (O(1) - Index Seek)
  • ไม่มี Index → Full Table Scan + Sort (ช้า)
  • MAX(Id) บน PK ก็เร็วเท่ากัน (Optimizer รู้จัก)

การใช้งานจริง: หาล่าสุด (Latest Record)

-- ตาราง Log/Event ที่มี CreatedAt
SELECT * FROM EventLog ORDER BY CreatedAt DESC LIMIT 1;

-- หรือหากมี Auto Increment Id
SELECT * FROM EventLog ORDER BY Id DESC LIMIT 1;
วิธีคำสั่งข้อดี/ข้อเสีย
ORDER BY DESC LIMIT 1SELECT * FROM t ORDER BY id DESC LIMIT 1มาตรฐาน, ใช้ Index ได้, อ่านง่าย
Subquery MAXSELECT * FROM t WHERE id = (SELECT MAX(id) FROM t)ชัดเจน, 2 Pass (หา MAX แล้วหาแถว)
JOIN กับ MAXSELECT 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