MariaDB中日期范围和时间范围之间的SQL查询
Posted
技术标签:
【中文标题】MariaDB中日期范围和时间范围之间的SQL查询【英文标题】:SQL Query between a date range and a time range in MariaDB 【发布时间】:2021-11-15 05:04:54 【问题描述】:我无法编写此查询以提供任何结果。我也在使用 MariaDB。
SELECT CallDate AS Week_Of, AgentName,
COUNT(*) AS TOTAL_Calls,
SUM(case when Accepted = 'ANSWERED' then 1 ELSE 0 END) AS Answered,
SUM(case when Accepted = 'NO ANSWER' then 1 ELSE 0 end) AS NoAnswer
FROM jshou_custom.afterhours
WHERE CallDate >= DATE_ADD(NOW(), INTERVAL -1 WEEK)
AND TIME(CallDate) BETWEEN '17:00:00' AND '08:00:00'
GROUP BY AgentName
DATE_ADD 子句工作得很好,并在该时间间隔内给出结果,但只要我添加 TIME 函数,结果中就不会返回任何内容。 CallDate 格式为2021-09-21 HH:MM:SS
我也尝试使用 HOUR 代替 TIME,但它也没有返回任何内容。
我正在尝试从 DATE_ADD 子句中指定的范围内的任何一天拉出呼叫。只要是在 1700 到 0800 之间(下班后电话)。
【问题讨论】:
您的GROUP BY
列与SELECT
列不一致。
我不得不假设这样的时间范围会跨越 2 天!!
是的。所以我想在 2021-09-21 17:00:00 和 2021-09-22 08:00:00 之间拉动
【参考方案1】:
我认为您需要像这样检查两个日期并调整每个日期使用的时间
WHERE
(CallDate > DATE_ADD(CURDATE(), INTERVAL -7 DAY) AND TIME(CallDate) > '17:00:00')
OR
(CallDate > DATE_ADD(CURDATE(), INTERVAL -6 DAY) AND TIME(CallDate) < '08:00:00')
【讨论】:
为什么使用 OR 而不是 AND? 不知道,脑子放个屁,改了 这仍然没有返回任何结果。但是,如果我注释掉AND (CallDate > DATE_ADD(CURDATE(), INTERVAL -6 DAY) AND TIME(CallDate) < '08:00:00')
,那么它将在 17:00:00 之后返回结果
如果我注释掉另一个条件并取消注释前一个条件,那么它也可以工作。两者都未注释时似乎存在问题。
我刚刚用 OR 子句再次尝试,它提取了结果。你会认为 AND 应该在那里,但看起来你对 OR 是正确的。感谢您的帮助!以上是关于MariaDB中日期范围和时间范围之间的SQL查询的主要内容,如果未能解决你的问题,请参考以下文章