我再一次試圖解決一個MYSQL相關的問題這聽起來很簡單,在第一,但現在令我有些頭疼。我已經閱讀了大量的代碼片段並進行了幾天的實驗,但是在尋找完美解決方案方面我還沒有取得太大的成功。對多時間匹配表項的日期時間範圍
我有兩個表。第一個包含電話,每個電話由在第一表中的行,它具有以下三列表示:
p_key的值(INT),call_date(DATE),call_time(TIME)
我的第二個表包含特定的事件,也有三列:
事項標識(INT),event_start(DATETIME),event_end(DATETIME)
我想只有我的表計的條目 - 電話t能力 - 這些不在同一日期的事件表中的開始和結束之間的時間內。
我的主要問題是,有可能在事件表中的多個條目爲一個日期(例如:從0800的事件 - 1000和其他一個1400至1600年在同一天)。否則,我可以簡單地使用BETWEEN語法。
我想這可能是一些這種影響:
SELECT
SUM(
CASE WHEN t1.p_key != 0
THEN 1 ELSE 0 END
) AS brt,
SUM(
CASE WHEN t1.p_key != 0
AND t1.call_time NOT BETWEEN TIME(t2.event_start) AND TIME(t2.event_end)
THEN 1 ELSE 0 END
) AS net
FROM call_table t1 INNER JOIN event_table t2
ON t1.call_date = DATE(t2.event_start)
WHERE t1.call_date >= '2013-09-01'
AND t1.call_date <= '2013-09-30'
GROUP BY DAY(t1.call_date)
不幸的是該查詢返回任何結果。
可有人點我到一個粗略的方向?
P.s.我試圖找到如何在這裏,所以我的帖子格式示例表數據參考,但無論是我失明或沒有具體的參考。因爲我已經看到了很好的格式化的示例表的數據,我知道這是可能等等,一個額外的線索,將不勝感激了很多爲好。
UPDATE 我設法得到一些輸出,使用LEFT JOIN而不是INNER。由於我不是MySQL專家,因此如果結果是正確的,我會手動去計數。
又是怎麼回事部分匹配?即當呼叫時間在event_end之前開始,但在它之後結束? (並在下一個event_start之前)?這是匹配還是不匹配? –
嗨,Alma Do Mundo。謝謝你的評論。 call_time沒有開始或結束,它是一個時間點,僅在呼叫開始時才表示。所以我試圖將時間點與時間範圍相匹配,確定這個時間點是在時間範圍內還是時間範圍之外。 – unit303