我再一次试图解决一个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