在MySQL中根据时间从表中获取数据

时间:2014-04-08 07:34:44

标签: mysql datetime

此查询存在一些问题。

从晚上10点到早上8点(从2200(夜晚)到0800(早上))

此查询无效。我知道日期在24:00后发生了变化,我认为这是查询无效的原因。

SELECT date(callDate) AS dates,
       sum(calltype = 'MISSED') AS missedCall,
       sum(callType = 'INCOMING') AS incomingCall,
       sum(callType = 'OUTGOING') AS outgoingCall
FROM tbl_call_details
WHERE userId = '1' AND
      date(callDate) BETWEEN '2014-04-01' AND '2014-04-31' AND
      time(callDate) > '22:00' AND time(callDate) < '08:00'
GROUP BY date(callDate)
ORDER BY date(callDate) ASC

也试过以下但这也不适合我。

SELECT  * FROM tbl_call_details
WHERE userId = '1' AND
      date(callDate) BETWEEN '2014-04-01' AND '2014-04-31' AND
      time(callDate) > '22:00' AND
      time(callDate) < '08:00'

我想使用select query在2200-0800之间获得结果。如果有任何想法,请指导我。

这项工作非常顺利,因为我已在同一天添加了0800-2200。

SELECT date(callDate) AS dates,
       sum(calltype = 'MISSED') AS missedCall,
       sum(callType = 'INCOMING') AS incomingCall,
       sum(callType = 'OUTGOING') AS outgoingCall
FROM tbl_call_details
WHERE userId = '1' AND
      date(callDate) BETWEEN '2014-04-01' AND '2014-04-31' AND
      time(callDate) > '08:00' AND time(callDate) < '22:00'
GROUP BY date(callDate)
ORDER BY date(callDate) ASC

输出: -

dates     missedCall    incomingCall    outgoingCall

2014-04-01  0           5           22

1 个答案:

答案 0 :(得分:1)

您应该使用OR条件,您的查询会尝试选择时间早于上午8点以及下午22点之后的数据,这是不可能的。注意你需要添加括号,如果你不添加它们,结果会有所不同(试试你的):

SELECT  date(callDate) AS dates, sum(calltype = 'MISSED') AS missedCall, sum(callType = 'INCOMING') AS incomingCall, sum(callType = 'OUTGOING') AS outgoingCall 
FROM tbl_call_details 
WHERE userId = '1' AND date(callDate) BETWEEN '2014-04-01' AND '2014-04-31' 
AND (time(callDate) > '22:00' OR time(callDate) < '08:00') 
GROUP BY date(callDate) ORDER BY date(callDate) ASC
相关问题