如何在两个日期之间找到每小时的销售额

时间:2017-01-13 05:16:57

标签: mysql date datetime aggregate average

假设我有5张销售表记录。

ID    Name    datetime_col
1     ABC     2016-09-15 02:07:56
2     HSJ     2016-09-31 11:45:45
3     JSD     2016-11-26 07:09:56
4     JUH     2016-12-31 12:00:00
5     IGY     2017-01-13 14:00:07

我想查找2016-09-15和2017-01-13之间每小时销售表中有多少记录 然后结果应该像

Hour                 sales_at_this_hour
2016-09-15 01:00:00  0
2016-09-15 02:00:00  1
2016-09-15 03:00:00  0
...
...
2017-01-13 01:00:00  0
2017-01-13 02:00:00  0
2017-01-13 03:00:00  0
....

2017-01-13 14:00:00  1

然后使用MySQL

查找sales_at_this_hour的平均值

1 个答案:

答案 0 :(得分:0)

编辑:抱歉,最初没有完全理解这个问题。

使用DATE_FORMAT

select 
    DATE_FORMAT(datetime_col, '%Y-%m-%d %h:00:00') as date,
    count(id) as count 
from table_name
group by date;

获取包含sales_at_this_hour>的小时数的结果1(不完全是你要求的)

datetime_col        count
2016-02-04 05:00:00 5
2016-02-04 07:00:00 1
2016-02-04 08:00:00 5
2016-02-04 10:00:00 10
2016-02-04 11:00:00 1

提供start_dateend_date,然后使用DATEDIFF计算平均计算的总时间间隔。

set @start_date = '2016-01-01', @end_date = '2017-01-01';
select 
    DATE_FORMAT(group_by_date.datetime, '%h:00:00') as hour, 
    AVG(group_by_date.count) / DATEDIFF(@end_date, @start_date) as average 
from  (
    select 
        DATE_FORMAT(created_dtm, '%Y-%m-%d %h:00:00') as datetime,
        count(id) as count 
    from table_name
    where created_dtm > @start_date
    and created_dtm < @end_date
    group by datetime
    ) group_by_date
group by hour;

每小时 每日平均销售量=总销售额/总天数

hour        average
01:00:00    0.03841209
02:00:00    0.01653005
03:00:00    0.0306716
04:00:00    0.01147541
05:00:00    0.01179831