MYSQL查询用于计算每小时的已用时间

I am trying to build a query in MYSQL that get the records for today, and then for each hour work out how many records there are, and there elapsed time.

Example data:

     Day      Time   Elapsed time
2015-01-28    9:00       0:53
2015-01-28    9:51       0:07
2015-01-28    10:32      1:45
2015-01-28    11:53      0:25

Expected results after the query

Time  Count   Elapsed 
 7      0       0:0
 8      0       0:0
 9      2       1:00
 10     1       1:45
 11     1       0:25
 12     0       0:0
 13     0       0:0  
 14     0       0:0
 15     0       0:0
 16     0       0:0
 17     0       0:0

so in this we have Each hour between 7 - 17 and how many records there are and the elapsed time for that hour.

I currently have this query:

SELECT  Date, 
            Count(Date) AS Count, 
            Sum(Elapsed) / 60 / 60 AS Elapsed, 
            avg(Elapsed) / 60 as average 
    FROM 
            telephone 
    WHERE 
            StartExt = 'E227'
            AND EndExt = 'E227'
            AND `Date` = CURDATE()
    Group by Date ORDER BY Date ASC

Which gets the total and elapsed for the full day and not broken down in to each hour, how could i achieve this?

For all hours that have data you can use the hour() function:

SELECT hour(time) as hour, Count(Date) AS Count, 
       Sum(Elapsed) / 60 / 60 AS Elapsed, avg(Elapsed) / 60 as average 
FROM telephone 
WHERE StartExt = 'E227' AND EndExt = 'E227' AND `Date` = CURDATE()
Group by hour(time)
ORDER BY hour ASC

If you need to get hours with no calls, that requires extra effort. You need a list of all the hours you want and then a left join. Something like this:

SELECT h.hh as hour, Count(time) AS Count, 
       Sum(Elapsed) / 60 / 60 AS Elapsed, avg(Elapsed) / 60 as average 
FROM (select 7 as hh union all select 8 union all select 9 union all
      . . .
      select 17
     ) h left join
     telephone t
     on h.hh = hour(t.time) and
        StartExt = 'E227' AND EndExt = 'E227' AND `Date` = CURDATE()
Group by h.hh
ORDER BY h.hh ASC

Notice that the WHERE conditions have been moved to the ON clause for the left outer join.