Mysql
MYSQL查詢查找兩個日期範圍之間的記錄
我正在使用 PHP 和 MySQL 的 Web 應用程序中工作。
我有兩張桌子
- 員工
employee_id email_id 3 tl1@jasmine.com 4 agent1@jasmine.com 5 agent2@jasmine.com 6 om1@jasmine.com 7 tl2@jasmine.com
- 輔導
coaching_id emp_id start_date end_date 1 4 2014-05-01 2014-10-02 2 5 2014-12-18 2015-01-22
我想要一個查詢來找出在指定日期範圍(例如開始日期“2015-01-22”和結束日期“2015-03-12”之間)沒有註冊任何教練計劃的員工。
現在我正在使用這樣的查詢,
SELECT employee_id FROM employee WHERE sup_id = 3 AND employee_id NOT IN ( SELECT emp_id FROM (coaching) WHERE (start_date NOT BETWEEN "2014-12-26" AND "2015-01-30") AND (end_date NOT BETWEEN "2014-12-26" AND "2015-01-30") )
我有一個邏輯,“如果任何員工在給定的 start_date 和 end_date 已經加入了教練計劃,他就沒有資格參加任何教練計劃。
**例如:**如果開始日期是“2014-12-26”,結束日期是“2015-01-30”。
那麼 ID 為 5 的員工沒有資格參加此輔導計劃,因為他現在正在進行另一項輔導活動,其開始日期為“2014-12-18”,結束日期為“2015-01-22”。
但是 ID 為 4 的員工以及所有其他未參加任何輔導活動的員工都有資格我的查詢中的問題在哪裡
謝謝
您的查詢有一個邏輯缺陷:它試圖找到不在有輔導的人列表中的人,但前提是輔導不在目標視窗中。
相反,在employee_id 上加入員工和教練表,使用employee 中的所有行,但僅使用coaching 中stop_date 晚於或等於所需開始日期(coaching 在視窗開始後結束)且start_date 小於的行或等於所需的停止日期(輔導在視窗結束前開始)。然後在指導中排除具有一個或多個匹配行的員工。
SELECT e.id AS employee_id FROM employee e LEFT JOIN coaching c ON c.employee_id = e.id AND c.end_date >= '2014-12-26' AND c.start_date <= '2015-01-30' WHERE c.employee_id IS NULL;