ฉันมีตาราง ("lms_attendance") ของเวลาเช็คอินและเวลาออกของผู้ใช้ที่มีลักษณะดังนี้:
id user time io (enum)
1 9 1370931202 out
2 9 1370931664 out
3 6 1370932128 out
4 12 1370932128 out
5 12 1370933037 in
ฉันกำลังพยายามสร้างมุมมองของตารางนี้ซึ่งจะแสดงผลเฉพาะระเบียนล่าสุดต่อ ID ผู้ใช้ในขณะที่ให้ค่า "in" หรือ "out" ให้ฉันทำดังนี้
id user time io
2 9 1370931664 out
3 6 1370932128 out
5 12 1370933037 in
ฉันค่อนข้างใกล้แล้ว แต่ฉันตระหนักว่าการดูจะไม่ยอมรับ subquerys ซึ่งทำให้ยากขึ้นมาก คำถามที่ใกล้เคียงที่สุดที่ฉันได้รับคือ:
select
`lms_attendance`.`id` AS `id`,
`lms_attendance`.`user` AS `user`,
max(`lms_attendance`.`time`) AS `time`,
`lms_attendance`.`io` AS `io`
from `lms_attendance`
group by
`lms_attendance`.`user`,
`lms_attendance`.`io`
แต่สิ่งที่ฉันได้รับคือ:
id user time io
3 6 1370932128 out
1 9 1370931664 out
5 12 1370933037 in
4 12 1370932128 out
ซึ่งใกล้ แต่ไม่สมบูรณ์. ฉันรู้ว่ากลุ่มสุดท้ายโดยไม่ควรอยู่ที่นั่น แต่ถ้าไม่มีมันจะส่งคืนเวลาล่าสุด แต่ไม่ใช่กับค่า IO สัมพัทธ์
ความคิดใด ๆ ? ขอบคุณ!