Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何查找两个日期之间每小时的销售额_Mysql_Date_Datetime_Aggregate_Average - Fatal编程技术网

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

Mysql 如何查找两个日期之间每小时的销售额,mysql,date,datetime,aggregate,average,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之间的销售表中每小时有多少条

假设一个销售表有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查找这一小时的平均销售额编辑:抱歉,一开始没有完全理解这个问题

使用

获得销售时间大于1小时的结果(不完全符合您的要求)

提供
开始日期
结束日期
,然后用于计算平均计算的总时间间隔

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;

你能给我一个有解答的问题的链接吗@shmosel我也很想看这个问题。最后,我理解了你的“缺口和岛屿”标签。抢手货我正要把它作为公认的答案写出来。@MasterDJon没有一个链接与我的问题相关如果我想选择平均值,那么两个日期之间的所有时间应该只有一个记录
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
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