ต่อไปนี้เป็นตัวอย่างที่ง่ายที่สุดที่เป็นไปได้แม้ว่าวิธีการแก้ปัญหาใด ๆ ควรจะสามารถปรับให้ได้ตามต้องการ แต่จะต้องใช้ผลลัพธ์ที่มีจำนวนมากที่สุด n:
จากตารางด้านล่างด้วยคอลัมน์บุคคลกลุ่มและอายุคุณจะได้ 2 คนที่เก่าแก่ที่สุดในแต่ละกลุ่มอย่างไร (ความสัมพันธ์ภายในกลุ่มไม่ควรให้ผลลัพธ์มากขึ้น แต่ให้ 2 อันดับแรกตามลำดับตัวอักษร)
+ -------- + ------- + ----- + | คน | กลุ่ม | อายุ | + -------- + ------- + ----- + | Bob | 1 | 32 | | จิล 1 | 34 | | ชอว์น 1 | 42 | | เจค | 2 | 29 | | พอล 2 | 36 | | ลอร่า 2 | 39 | + -------- + ------- + ----- +
ชุดผลลัพธ์ที่ต้องการ:
+ -------- + ------- + ----- + | ชอว์น 1 | 42 | | จิล 1 | 34 | | ลอร่า 2 | 39 | | พอล 2 | 36 | + -------- + ------- + ----- +
หมายเหตุ:คำถามนี้สร้างขึ้นก่อนหน้านี้- รับการบันทึกด้วยค่าสูงสุดสำหรับแต่ละกลุ่มของผลลัพธ์ SQL ที่จัดกลุ่ม - สำหรับการรับแถวบนสุดเดียวจากแต่ละกลุ่มและที่ได้รับคำตอบเฉพาะ MySQL ที่ยอดเยี่ยมจาก @Bohemian:
select *
from (select * from mytable order by `Group`, Age desc, Person) x
group by `Group`
ชอบที่จะสามารถสร้างสิ่งนี้ได้แม้ว่าฉันจะไม่เห็นวิธีก็ตาม