2012-06-29 84 views
1

我正在嘗試進行查詢以獲得特定月份每天的高峯時間。 我的表看起來像這樣:一個月中每天的高峯時間表MySQL

id  idproduct  created_at 
1  021354684  2011-10-01 20:25:48 
2  033546835  2011-10-01 20:30:15 
3  055965654  2011-10-01 20:45:20 
4  012975343  2011-10-02 14:03:36 
5  021354684  2011-10-02 15:55:48 
6  033546835  2011-10-02 16:30:15 
7  055965654  2011-10-02 16:45:20 
8  012975343  2011-10-02 18:53:36 
9  021354684  2011-10-03 08:55:48 
10  033546835  2011-10-03 09:30:15 
11  055965654  2011-10-03 14:03:20 
12  012975343  2011-10-03 14:03:36 

我試圖得到的是這樣的事情...:

day  rush_hour number_of_rows 
1  20:00  3 
2  16:00  5 
3  14:00  4 

是否有可能得到這樣的表?你們能幫我嗎?

我犯了一個錯誤,對此抱歉。行數應占總當天賣出,而不是在這一個小時:(不好意思項目

+1

所以,你會想要在白天和高峯時段分組created_at?有沒有時間表,像凌晨1點到凌晨2點,凌晨2點到凌晨3點,...? – Chris

+0

有沒有,但將是有用的有一個像凌晨1點到凌晨2點嘿 – Nathre

回答

3

http://sqlfiddle.com/#!2/5b87b/7

幫助

首先,計算每一天的每一個小時的計數值(到視圖,因爲我們將在下面兩次使用):

CREATE VIEW hours AS 
SELECT 
    DATE(created_at) AS d, 
    HOUR(created_at) AS h, 
    COUNT(*) AS c 
FROM item 
GROUP BY DATE(created_at), HOUR(created_at); 

最終查詢:

SELECT 
    hours.d AS `day`, 
    hours.h AS `rush_hour`, 
    hours.c AS `count` 

-- get the max count for every day 
FROM (
     SELECT 
     d,   -- the day 
     MAX(c) as c -- the count 
     FROM hours 
     GROUP BY d 
    ) AS maxc 

-- find the actual hour(s) with the max count for every day: 
INNER JOIN hours ON hours.c = maxc.c 
       AND hours.d = maxc.d; 
+0

當然,你可以複製粘貼視圖的選擇到第二個查詢,如果你想。 – biziclop

+0

非常感謝。它工作熟練!唯一的是,我得到了一年中的355天。但它工作:) – Nathre

+0

如果你想要編號的行,那麼它可能會有所幫助:http://sqlfiddle.com/#!2/5b87b/11 – biziclop

0

試試這個:

SELECT dayofyear(created_at) as day, hour(created_at) as rush_hour, count(*) as number_of_rows 
FROM table 
GROUP BY dayofyear(created_at), hour(created_at); 
0

這未做一個觀點:

SELECT ddd.day, eee.rush_hour, ddd.maxo 
FROM 
(select day, max(num_rows) as maxo from (
SELECT 
    day(created_at) as day, 
    hour(created_at) as rush_hour, 
    count(1) as num_rows 
FROM item 
GROUP BY 
    day(created_at), hour(created_at) 
) as groupo group by day) as ddd 

LEFT JOIN 
(SELECT 
    day(created_at) as day, 
    hour(created_at) as rush_hour, 
    count(1) as num_rows 
FROM item 
GROUP BY 
    day(created_at), hour(created_at) 
) as eee on ddd.day=eee.day and ddd.maxo=eee.num_rows 

我可以想象它被格式化得更好或者有更多相關的別名,但是這裏有很多子選擇。

並感謝SQLfiddlers將數據放在那裏。

而且我認爲,如果你有兩個小時並列最高數量的數字,它們都會顯示出來,所以你會得到兩個(或更多)記錄。

+0

這個作品很不錯,但我不知道哪個月在做這件事。我得到31天和結果。 Ty爲您提供幫助! – Nathre