คำสั่ง SQL เลือกข้อมูลรายการที่ 2

จริง ๆ คำสั่งนี้ก็เป็นที่คุ้นเคยกันอยู่แล้วครับ ซึ่งบางทีพอโจทย์มันเปลี่ยนเราก็อาจมองข้ามเรื่องพื้นฐานไปได้เหมือนกัน

เรื่องของเรื่องคือ ผมต้องการข้อมูลการเข้าระบบครั้งก่อนหน้าของตัวเองมาแสดง สิ่งที่คิดได้ก็คือ ทำการเรียงลำดับจากวันที่ปัจจุบันไปหาวันที่ก่อน แล้วเลือกเอารายการที่สองมาเพียงรายการเดียว

จากแนวคิดที่ตั้งใจไว้เปลี่ยนเป็นคำสั่ง SQL ได้ประมาณนี้
SELECT * FROM (
    SELECT * FROM login_log ORDER BY create_date DESC LIMIT 2
) AS Q ORDER BY create_date LIMIT 1

Query ชั้นใน เลือกรายการมาเพียงสองรายการก่อน โดยเรียงลำดับตามวันที่มากสุดขึ้นก่อน ซึ่งก็จะได้ข้อมูลมาสองรายการ เสร็จแล้วนำผลลัพท์ที่ได้เรียงลำดับอีกครั้ง (นอกวงเล็บ) โดยเรียงเอาวันที่น้อยมาก่อน แล้วตัดออกเหลือเพียงหนึ่งรายการ ก็จะได้รายการที่ต้องการ

แต่หลังจากตีลังกามองไปมองมา ก็แวบขึ้นได้ว่า มันมีวิธีที่ง่ายกว่านี้ (ที่มองหาวิธีที่ง่ายกว่าเพราะโค้ดจริงๆมันยาวกว่านี้ เลยทำให้ต้องมานั่งทบทวน Query ใหม่) โดยการใช้คำสั่งพื้นฐานสุดๆ
SELECT * FROM login_log ORDER BY create_date DESC LIMIT 1, 1

พระเอกคือ LIMIT ซึ่งพารามิเตอร์ตัวแรกคือรายการแรกที่ต้องการ ซึ่งรายการแรกของ MySQL คือ 0 (หรือระบุแค่ตัวที่สองอย่างเดียวหมายถึงเริ่มตั้งแต่รายการแรก) และพารามิเตอร์ตัวที่สองคือ จำนวนที่ต้องการ ดังนั้น "รายการที่สองรายการเดียว" จึงเขียนได้เป็น LIMIT 1, 1
ผู้เขียน goragod โพสต์เมื่อ 10 ก.ค. 2560 เปิดดู 11,109 ป้ายกำกับ SQL
^