【问题标题】:SQL Query between a date range and a time range in MariaDBMariaDB中日期范围和时间范围之间的SQL查询
【发布时间】: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 之间拉动

标签: mysql sql select time mariadb


【解决方案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 &gt; DATE_ADD(CURDATE(), INTERVAL -6 DAY) AND TIME(CallDate) &lt; '08:00:00'),那么它将在 17:00:00 之后返回结果
  • 如果我注释掉另一个条件并取消注释前一个条件,那么它也可以工作。两者都未注释时似乎存在问题。
  • 我刚刚用 OR 子句再次尝试,它提取了结果。你会认为 AND 应该在那里,但看起来你对 OR 是正确的。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-06
  • 1970-01-01
  • 2014-06-13
  • 1970-01-01
  • 2017-12-20
  • 1970-01-01
相关资源
最近更新 更多