2013-06-30 36 views
0

我喜歡按天,月份分組結果。我的問題是,在我的生意中,這一天從2PM(14:00:00)開始,並於上午8:00(8:00:00)結束。MYSQL:選擇天數與自定義開始和結束小時的天數

這裏的目標是統計在一天中註冊的唯一客戶的數量。

我的表是這樣的:

id  customer join_date    leave_date    duration 
6247 4043035  2013-06-07 14:32:00  2013-06-07 14:57:24  1524 
6248 4006087  2013-06-07 14:32:11  2013-06-07 14:41:18  547 
6249 4020103  2013-06-07 14:32:30  2013-06-07 15:24:32  3122 
6250 4020103  2013-06-07 14:32:30  2013-06-07 14:41:18  528 
6251 4020103  2013-06-07 14:32:30  2013-06-07 15:55:33  4983 
6252 4049611  2013-06-07 14:34:14  2013-06-07 17:14:25  9611 
6253 4049611  2013-06-07 14:34:14  2013-06-07 14:57:15  1381 
6254 4046774  2013-06-07 14:36:21  2013-06-07 14:41:18  297 
6255 4048402  2013-06-07 14:37:51  2013-06-07 14:41:18  207 
6256 4006073  2013-06-07 14:39:54  2013-06-07 14:42:19  145 
6257 4022477  2013-06-07 14:40:40  2013-06-07 14:46:44  364 
6258 4049923  2013-06-07 14:42:08  2013-06-07 14:57:09  901 
6259 4018158  2013-06-07 14:45:05  2013-06-07 14:45:43  38 
6260 4010012  2013-06-07 14:45:39  2013-06-07 14:46:44  65 
6261 4018158  2013-06-07 14:45:43  2013-06-07 14:53:16  453 

用 「正常」 的日子,我的要求是這樣的:

SELECT count(distinct l.customer) nbj, 
     DAY(l.join_date) jour, 
     MONTH(l.join_date) mois, 
     str_to_date(l.join_date,'%Y-%m-%d') ordre 
FROM log_waitingtime l 
GROUP BY DAY(l.join_date), MONTH(l.join_date) 
ORDER BY ordre ASC 

它工作正常。

我已經嘗試了很多東西: http://forums.mysql.com/read.php?10,202789,202807 http://www.artfulsoftware.com/infotree/qrytip.php?id=819

我認爲這些解決方案複雜(我甚至不明白一切

那麼,有沒有一種更簡單的方式來實現這一目標英寸SQL

回答

1

我會用這個查詢:

SELECT 
    MONTH(l.join_date - INTERVAL 14 HOUR) mois, 
    DAY(l.join_date - INTERVAL 14 HOUR) jour, 
    COUNT(distinct l.customer) nbj, 
    str_to_date(l.join_date - INTERVAL 14 HOUR,'%Y-%m-%d') ordre 
FROM log_waitingtime l 
GROUP BY 
    MONTH(l.join_date - INTERVAL 14 HOUR), 
    DAY(l.join_date - INTERVAL 14 HOUR) 
ORDER BY 
    ordre ASC 
+0

之間的持續時間在一天登記的客戶我已經做了另外一個測試用'哪裏join_date> ='2013-06-12 14:00:00'和join_date <='2013-06-13 8:00:00''(Juste不同於以前的測試日)。查詢的結果是386. Fthiella解決方案返回395.我認爲仍然存在問題。我會做進一步的測試。 – Youpsla

+0

@Youpsla我將時間推遲14小時,所以如果加入日期是2013-06-30 14:00:00,它將被計爲2013-06-30 00:00:00,如果加入日期是2013年 - 07-01 08:00:00它會計爲2013-06-30 18:00:00,我希望這是你正在尋找的。如果它們存在,您可能希望從8AM到2PM排除連接日期。 – fthiella

+0

@dianuj我明白爲什麼我有不同的結果。例如,表中有客戶在2PM(13:52:24)之前有join_date。我喜歡數這些人。然後,我認爲我可以在上午8點開始,第二天在7點59分59秒結束。那麼我想我可以用'INTERVAL 8 HOUR'替換'INTERVAL 14 HOUR'? – Youpsla

0

試試這個它會顯示誰已經 2PM(14:00:00)早上8點(8:00:00)

SELECT q.* FROM( 
    SELECT COUNT(DISTINCT l.customer) nbj, 
    DATE_FORMAT(l.join_date,'%H:%i:%s') TIMEONLY, 
     DAY(l.join_date) jour, 
     MONTH(l.join_date) mois, 
     STR_TO_DATE(l.join_date,'%Y-%m-%d') ordre 
FROM log_waitingtime l 
GROUP BY DAY(l.join_date), MONTH(l.join_date)  
) q WHERE q.TIMEONLY >= '14:00:00' OR q.TIMEONLY <= '08:00:00' 
ORDER BY q.jour,q.mois, q.ordre ASC 
+0

我已經直接完成了這個查詢來測試兩種提議的解決方案:'SELECT count(distinct player)FROM'log_waitingtime' where join_date> ='2013-06-12 14:00:00'and join_date <='2013- 06-13 8:00:00',game_type ='4'和game_amount ='6''。結果是366.只有fthiella提出的解決方案給出了很好的結果。 dianuj解決方案返回411.我沒有足夠的SQL技能來了解和理解dianuj失敗的原因。但感謝你們兩個爲你的快速回答。 – Youpsla

+0

完整的評論:我直接做了這個查詢來測試這兩個提議的解決方案:'SELECT count(distinct player)FROM'log_waitingtime' where join_date> ='2013-06-12 14:00:00'and join_date <= '2013-06-13 8:00:00''。 (我在兩個解決方案的'FROM log_waitingtime l'後面添加了一個WHERE子句)。結果是366.只有fthiella提出的解決方案給出了很好的結果。 dianuj解決方案返回411.我沒有足夠的SQL技能來了解和理解dianuj失敗的原因。但感謝你們兩個爲你的快速回答。 – Youpsla

相關問題