【问题标题】:How to find sales per hour between two date如何查找两个日期之间每小时的销售额
【发布时间】:2017-01-13 05:16:57
【问题描述】:

假设一个销售表有 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 的平均值

【问题讨论】:

标签: mysql date datetime aggregate average


【解决方案1】:

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

使用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

【讨论】:

  • 如果我想选择平均值,那么两个日期之间的所有时间应该只有一条记录
猜你喜欢
  • 1970-01-01
  • 2018-05-06
  • 1970-01-01
  • 1970-01-01
  • 2012-04-17
  • 2021-12-27
  • 2011-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多