2014-04-08 53 views
-1

此查詢有一些問題。在MySQL中根據時間從表中獲取數據

晚上10點 - 上午08點(從2200(夜)至0800(上午))

這查詢不工作。我知道24小時後的日期變化,我認爲這是查詢不起作用的原因。

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查詢得到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 

OUTPUT: -

dates  missedCall incomingCall outgoingCall 

2014-04-01 0   5   22 

回答

1

你應該使用OR條件,您的查詢試圖選擇數據,時間是早上8點以前,也經過22 PM,這是不可能的。注意你需要添加括號,如果你不添加它們,結果會不同(嘗試你自己的):

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