2017-10-05 117 views
0

我需要只能在指定時間之間提取數據,而不管日期範圍有多大。例如,僅在日期範圍內的每天10:00至11:00之間檢索記錄。MySQL TIME函數意外的結果

我想我已經確定了它,直到用戶指定了一個跨越午夜的時間並且它沒有返回任何數據。

這是我的查詢沒有返回數據(使用日期和時間函數):

SELECT 
an.descr_agente as Agent, 
COUNT(if(ql.queue IN (9100, 9102, 9104),1, null)) as UK, 
COUNT(if(ql.queue IN (9200, 9202, 9204),1, null)) as AU, 
COUNT(if(ql.queue IN (9400, 9402, 9404),1, null)) as CA 
FROM queue_log ql 
LEFT JOIN agenti_noti an 
ON ql.agent = an.nome_agente 
WHERE ql.partition = 'P001' 
AND DATE(from_unixtime(ql.time_id)) BETWEEN '2017-10-03' AND '2017-10-04' 
AND TIME(from_unixtime(ql.time_id)) BETWEEN '16:00' AND '01:01' 
AND ql.verb IN ('COMPLETECALLER','COMPLETEAGENT','TRANSFER') 
AND an.descr_agente IS NOT NULL 
GROUP BY an.descr_agente 

如果我將其更改爲下面,它的工作原理,但當然會有一旦用戶的增加不正確的數據日期範圍超過1天。

SELECT 
an.descr_agente as Agent, 
COUNT(if(ql.queue IN (9100, 9102, 9104),1, null)) as UK, 
COUNT(if(ql.queue IN (9200, 9202, 9204),1, null)) as AU, 
COUNT(if(ql.queue IN (9400, 9402, 9404),1, null)) as CA 
FROM queue_log ql 
LEFT JOIN agenti_noti an 
ON ql.agent = an.nome_agente 
WHERE ql.partition = 'P001' 
AND from_unixtime(ql.time_id) BETWEEN '2017-10-03 16:00' AND '2017-10-04 01:01' 
AND ql.verb IN ('COMPLETECALLER','COMPLETEAGENT','TRANSFER') 
AND an.descr_agente IS NOT NULL 
GROUP BY an.descr_agente 

我假設TIME函數不會自動重疊到第二天。我應該怎麼做才能正常工作?

回答

1
AND (TIME(from_unixtime(ql.time_id)) BETWEEN '16:00' AND '23:59' 
OR TIME(from_unixtime(ql.time_id)) BETWEEN '00:00' AND 01:01') 

這可能需要一些UI修改或附加功能來檢測交叉和創建拆分,

+0

啊我希望我不會像那樣分裂它。用戶界面是HTML/PHP和Javascript,我猜想我只需添加更多的檢查來添加它。 – Stephen

0

我不是專家,但不能使用DATE_FORMAT?例如:DATE_FORMAT(FROM_UNIXTIME(ql.time_id),'%Y-%m-%d%H:%i')BETWEEN'2017-10-03 16:00'AND'2017-10-04 01:01'