กรณีศึกษา การนัดหมายประชุม SQL command

กรณีศึกษา
โจทย์ คือจะต้องทำการนัดหมาย คนเพื่อมาประชุมโดย
ต้องเชคให้ได้ก่อนว่า มีใครบ้างที่ไม่ว่างในช่วงเวลาที่กำหนด
โดยนัดหมายคน ที่เวลา 10:00-12:00 อยากรู้ว่าใครติดประชุมบ้าง?
คนที่ 1 ติดประชุม 8:00-17:00
คนที่ 2 ติดประชุม 8:00-11:00
คนที่ 3 ติดประชุม 11:00-17:00
คนที่ 4 ติดประชุม 10:30-11:30
คนที่ 5 ติดประชุม 13:00-15:00

โจทย์คือเรากำลังจะหา SQL Command

โดยใช้ s แทน เวลาเริ่มประชุม
            stop แทนเวลาเลิกประชุม

s = 10.00
stop = 12.00

table tablex
id, Begintime, EndTime
1 8:00,17:00
2 8:00,11:00
3 11:00,17:00
4 10:30,11:30
5 13:00,15:00


แนวทางในการหาคนที่ไม่ว่างในเวลา s และ stop
1 (เวลาเริ่มประชุม < 10.00 AND เวลาเลิกประชุม > 12.00)
2 (เวลาเริ่มประชุม > 10.00 AND เวลาเริ่มประชุม < 12.00)
3 (เวลาเลิกประชุม > 10.00 AND เวลาเลิกประชุม < 12.00)


เปลี่ยนเป็น Command

1 (Begintime < s and Endtime > Stop)
2 (Begintime > s and Begintime < stop)
3 (Endtime > s and Endtime < stop)

แนวคิดในการค้นหา SQL


จากภาพข้างต้น

คนที่ 1 2 3 และ 4 ทั้งหมดที่กล่าวมามีส่วนของช่วงเวลาที่
อยู่ในกรอบเส้นปะสีเทา ซึ่งเป็นคนที่ไม่ว่างแน่นอน

คนที่ 5 (กรอบสีน้ำเงินเล็ก)
ไม่ได้อยู่ในตำแหน่งกรอบเส้นปะสีเทา จึงตอบได้ว่า คนที่ 5 นั้นว่าง

เราจะได้ SQL Command
ดังนี้

select id from tablex
where
(Begintime < s and Endtime > stop) or
(Begintime > s and Begintime < stop) or
(Endtime > s and Endtime < stop)





Comments

  1. หลายวันก่อนกลับมาอ่านเอง เพื่อเอาไปประยุงต์คิด OT โดยให้ระบบหักพักเที่ยงออกไป
    ก็ยังสามารถประยุกต์ได้

    ReplyDelete

Post a Comment