我想返回一周中的某一天的某个小时的滚动/移动平均值,对于一系列日期,过去几周的范围内。如何在星期几和星期几之间检索4周移动平均值?
该范围中每个日期的回顾都有一个偏移量和一个跨度周。对于该范围内的每个日期,我想从之前几周的数据中提取数据,使用一周的开局周数,以及几周的时间跨度。例如,10月1日至10月7日,回顾4周,从1周开始回来。
10月1日至10月7日的每一天,从一周前开始回顾一下4周的时间间隔,并计算每个小时的计数总数,每天发生在同一天的每周(1-7天) ),在回顾跨度。
然后我们可以对此进行一些数学计算,在这种情况下,获取该范围内每个日期的平均入场密度,或每周某天的平均每小时入场次数。
从10月1日开始在该范围内。
这将产生24行,用:充满10月1日(2017年10月1日)
日期列,
一个星期几列(1日),
计数(1周)的每个实例的总和,以及每个小时的条目的总和(4周)
10月1日之前返回的一个星期日范围,其中星期日是(Yoda税)。
因此,需要从9月3日,10日,17日和24日每小时的条目数,并计算一天中的每个小时的平均值。 10月1日上午10点的响应值将是3日,10日,17日和24日上午10点的行数的总和。
这是10月1日。
对于10月2日在该范围内,它将拉动24行,日期列为2017-10-02,dayofweek列(周一为2),以及回溯距离每小时的平均值,其中包括: 9月4日, 9月11日, 9月18日
选择的HOUR(datecolumn)计数,从每一天的总和将由天以上的每个小时段具有价值的回溯范围数除以。
架构设置:每月
CREATE TABLE `myTable` (
`datetimecolumn` datetime<br/>
)
INSERT INTO MyTable
(`datetimecolumn`)
VALUES
('2015-08-01 00:01:00'),
('2015-08-01 00:21:00'),
('2015-08-01 01:25:00'),
('2015-08-01 01:39:00'),
('2015-08-01 02:11:00'),
('2015-08-01 03:01:00'),
## more here, several randomly timed entries in most hours of each day
几千项。
('2017-10-16 01:01:00'),
('2017-10-16 02:11:00'),
('2017-10-16 02:21:00'),
('2017-10-16 03:01:00'),
('2017-10-16 05:43:00'),
('2017-10-16 06:21:00')
;
为二零一七年九月三十零日于2017年10月2日预期的效果:
| Date | DOW | hour_of_day | Avg_Num_Entries |
|------------|-----|-------------| ----------------|
| 2017-09-30 | 7 | 00 | 12 |
| 2017-09-30 | 7 | 01 | 11 |
| 2017-09-30 | 7 | 02 | 14 |
| 2017-09-30 | 7 | 03 | 12 |
| 2017-09-30 | 7 | 04 | 11 |
| 2017-09-30 | 7 | 05 | 14 |
(..24 total rows for DAYOFWEEK 7)
| 2017-10-01 | 1 | 00 | 12 |
| 2017-10-01 | 1 | 01 | 11 |
| 2017-10-01 | 1 | 02 | 14 |
| 2017-10-01 | 1 | 03 | 12 |
| 2017-10-01 | 1 | 04 | 11 |
| 2017-10-01 | 1 | 05 | 14 |
(..24 total rows for DAYOFWEEK 1)
| 2017-10-02 | 2 | 00 | 12 |
| 2017-10-02 | 2 | 01 | 11 |
| 2017-10-02 | 2 | 02 | 14 |
| 2017-10-02 | 2 | 03 | 12 |
| 2017-10-02 | 2 | 04 | 11 |
| 2017-10-02 | 2 | 05 | 14 |
(..24 total rows for DAYOFWEEK 2)
我目前这个工作:
SELECT
DATE(c.datetimecolum) datetimecolum,
t.sq_datetimecolum,
t.sq_hour,
t.sq_count
FROM
calls c
INNER JOIN(
SELECT
DATE(datetimecolum) sq_datetimecolum,
DAYOFWEEK(datetimecolum) sq_dow,
HOUR(datetimecolum) sq_hour,
COUNT(*) sq_count
FROM
calls
GROUP BY sq_datetimecolum,sq_dow,sq_hour
) AS t
ON
DATE(t.sq_datetimecolum) <= DATE_SUB(
DATE(c.datetimecolum),
INTERVAL 1 WEEK
) AND DATE(t.sq_datetimecolum) >= DATE_SUB(
DATE(c.datetimecolum),
INTERVAL 4 WEEK
) AND DAYOFWEEK(t.sq_datetimecolum) = DAYOFWEEK(DATE(c.datetimecolum))
WHERE DATE(c.datetimecolum) >= '2017-08-01' AND DATE(c.datetimecolum) <= '2017-08-02'
GROUP BY DATE(c.datetimecolum),DATE(t.sq_datetimecolum),DAYOFWEEK(t.sq_datetimecolum),t.sq_hour
ORDER BY DATE(c.datetimecolum),t.sq_datetimecolum,t.sq_hour
这是生产这种输出的日期范围2017-08-01至2017-08-02:
| datetimecolum | sq_datetimecolum | sq_hour | sq_count |
|----------------------|------------------|---------|----------|
| 2017-08-01 | 2017-07-04 | 0 | 18 |
| 2017-08-01 | 2017-07-04 | 1 | 11 |
| 2017-08-01 | 2017-07-04 | 2 | 7 |
| 2017-08-01 | 2017-07-04 | 3 | 2 |
| 2017-08-01 | 2017-07-04 | 4 | 3 |
| 2017-08-01 | 2017-07-04 | 5 | 2 |
| 2017-08-01 | 2017-07-04 | 6 | 4 |
| 2017-08-01 | 2017-07-04 | 7 | 1 |
| 2017-08-01 | 2017-07-04 | 8 | 4 |
| 2017-08-01 | 2017-07-04 | 9 | 6 |
| 2017-08-01 | 2017-07-04 | 10 | 6 |
| 2017-08-01 | 2017-07-04 | 11 | 3 |
| 2017-08-01 | 2017-07-04 | 12 | 11 |
| 2017-08-01 | 2017-07-04 | 13 | 21 |
| 2017-08-01 | 2017-07-04 | 14 | 44 |
| 2017-08-01 | 2017-07-04 | 15 | 52 |
| 2017-08-01 | 2017-07-04 | 16 | 32 |
| 2017-08-01 | 2017-07-04 | 17 | 26 |
| 2017-08-01 | 2017-07-04 | 18 | 22 |
| 2017-08-01 | 2017-07-04 | 19 | 25 |
| 2017-08-01 | 2017-07-04 | 20 | 14 |
| 2017-08-01 | 2017-07-04 | 21 | 7 |
| 2017-08-01 | 2017-07-04 | 22 | 10 |
| 2017-08-01 | 2017-07-04 | 23 | 6 |
| 2017-08-01 | 2017-07-11 | 0 | 21 |
| 2017-08-01 | 2017-07-11 | 1 | 21 |
| 2017-08-01 | 2017-07-11 | 2 | 12 |
| 2017-08-01 | 2017-07-11 | 3 | 12 |
| 2017-08-01 | 2017-07-11 | 4 | 3 |
| 2017-08-01 | 2017-07-11 | 5 | 4 |
| 2017-08-01 | 2017-07-11 | 6 | 2 |
| 2017-08-01 | 2017-07-11 | 7 | 3 |
| 2017-08-01 | 2017-07-11 | 8 | 7 |
| 2017-08-01 | 2017-07-11 | 10 | 5 |
| 2017-08-01 | 2017-07-11 | 11 | 14 |
| 2017-08-01 | 2017-07-11 | 12 | 50 |
| 2017-08-01 | 2017-07-11 | 13 | 99 |
| 2017-08-01 | 2017-07-11 | 14 | 117 |
| 2017-08-01 | 2017-07-11 | 15 | 132 |
| 2017-08-01 | 2017-07-11 | 16 | 101 |
| 2017-08-01 | 2017-07-11 | 17 | 89 |
| 2017-08-01 | 2017-07-11 | 18 | 81 |
| 2017-08-01 | 2017-07-11 | 19 | 110 |
| 2017-08-01 | 2017-07-11 | 20 | 120 |
| 2017-08-01 | 2017-07-11 | 21 | 119 |
| 2017-08-01 | 2017-07-11 | 22 | 85 |
| 2017-08-01 | 2017-07-11 | 23 | 35 |
| 2017-08-01 | 2017-07-18 | 0 | 44 |
| 2017-08-01 | 2017-07-18 | 1 | 33 |
| 2017-08-01 | 2017-07-18 | 2 | 11 |
| 2017-08-01 | 2017-07-18 | 3 | 13 |
| 2017-08-01 | 2017-07-18 | 4 | 7 |
| 2017-08-01 | 2017-07-18 | 5 | 2 |
| 2017-08-01 | 2017-07-18 | 6 | 7 |
| 2017-08-01 | 2017-07-18 | 7 | 5 |
| 2017-08-01 | 2017-07-18 | 8 | 7 |
| 2017-08-01 | 2017-07-18 | 9 | 10 |
| 2017-08-01 | 2017-07-18 | 10 | 5 |
| 2017-08-01 | 2017-07-18 | 11 | 16 |
| 2017-08-01 | 2017-07-18 | 12 | 39 |
| 2017-08-01 | 2017-07-18 | 13 | 67 |
| 2017-08-01 | 2017-07-18 | 14 | 128 |
| 2017-08-01 | 2017-07-18 | 15 | 133 |
| 2017-08-01 | 2017-07-18 | 16 | 129 |
| 2017-08-01 | 2017-07-18 | 17 | 120 |
| 2017-08-01 | 2017-07-18 | 18 | 102 |
| 2017-08-01 | 2017-07-18 | 19 | 93 |
| 2017-08-01 | 2017-07-18 | 20 | 112 |
| 2017-08-01 | 2017-07-18 | 21 | 81 |
| 2017-08-01 | 2017-07-18 | 22 | 74 |
| 2017-08-01 | 2017-07-18 | 23 | 43 |
| 2017-08-01 | 2017-07-25 | 0 | 32 |
| 2017-08-01 | 2017-07-25 | 1 | 19 |
| 2017-08-01 | 2017-07-25 | 2 | 9 |
| 2017-08-01 | 2017-07-25 | 3 | 3 |
| 2017-08-01 | 2017-07-25 | 4 | 6 |
| 2017-08-01 | 2017-07-25 | 5 | 8 |
| 2017-08-01 | 2017-07-25 | 6 | 3 |
| 2017-08-01 | 2017-07-25 | 7 | 2 |
| 2017-08-01 | 2017-07-25 | 8 | 3 |
| 2017-08-01 | 2017-07-25 | 9 | 2 |
| 2017-08-01 | 2017-07-25 | 10 | 5 |
| 2017-08-01 | 2017-07-25 | 11 | 15 |
| 2017-08-01 | 2017-07-25 | 12 | 39 |
| 2017-08-01 | 2017-07-25 | 13 | 71 |
| 2017-08-01 | 2017-07-25 | 14 | 84 |
| 2017-08-01 | 2017-07-25 | 15 | 100 |
| 2017-08-01 | 2017-07-25 | 16 | 92 |
| 2017-08-01 | 2017-07-25 | 17 | 58 |
| 2017-08-01 | 2017-07-25 | 18 | 59 |
| 2017-08-01 | 2017-07-25 | 19 | 70 |
| 2017-08-01 | 2017-07-25 | 20 | 80 |
| 2017-08-01 | 2017-07-25 | 21 | 83 |
| 2017-08-01 | 2017-07-25 | 22 | 60 |
| 2017-08-01 | 2017-07-25 | 23 | 40 |
| 2017-08-02 | 2017-07-05 | 0 | 7 |
| 2017-08-02 | 2017-07-05 | 1 | 6 |
| 2017-08-02 | 2017-07-05 | 2 | 4 |
| 2017-08-02 | 2017-07-05 | 3 | 4 |
| 2017-08-02 | 2017-07-05 | 4 | 3 |
| 2017-08-02 | 2017-07-05 | 5 | 1 |
| 2017-08-02 | 2017-07-05 | 6 | 2 |
| 2017-08-02 | 2017-07-05 | 7 | 1 |
| 2017-08-02 | 2017-07-05 | 8 | 3 |
| 2017-08-02 | 2017-07-05 | 9 | 3 |
| 2017-08-02 | 2017-07-05 | 10 | 5 |
| 2017-08-02 | 2017-07-05 | 11 | 13 |
| 2017-08-02 | 2017-07-05 | 12 | 50 |
| 2017-08-02 | 2017-07-05 | 13 | 97 |
| 2017-08-02 | 2017-07-05 | 14 | 125 |
| 2017-08-02 | 2017-07-05 | 15 | 139 |
| 2017-08-02 | 2017-07-05 | 16 | 106 |
| 2017-08-02 | 2017-07-05 | 17 | 106 |
| 2017-08-02 | 2017-07-05 | 18 | 93 |
| 2017-08-02 | 2017-07-05 | 19 | 80 |
| 2017-08-02 | 2017-07-05 | 20 | 86 |
| 2017-08-02 | 2017-07-05 | 21 | 68 |
| 2017-08-02 | 2017-07-05 | 22 | 53 |
| 2017-08-02 | 2017-07-05 | 23 | 26 |
| 2017-08-02 | 2017-07-12 | 0 | 24 |
| 2017-08-02 | 2017-07-12 | 1 | 21 |
| 2017-08-02 | 2017-07-12 | 2 | 16 |
| 2017-08-02 | 2017-07-12 | 3 | 3 |
| 2017-08-02 | 2017-07-12 | 4 | 4 |
| 2017-08-02 | 2017-07-12 | 5 | 5 |
| 2017-08-02 | 2017-07-12 | 6 | 1 |
| 2017-08-02 | 2017-07-12 | 7 | 2 |
| 2017-08-02 | 2017-07-12 | 8 | 5 |
| 2017-08-02 | 2017-07-12 | 9 | 15 |
| 2017-08-02 | 2017-07-12 | 10 | 7 |
| 2017-08-02 | 2017-07-12 | 11 | 12 |
| 2017-08-02 | 2017-07-12 | 12 | 44 |
| 2017-08-02 | 2017-07-12 | 13 | 60 |
| 2017-08-02 | 2017-07-12 | 14 | 73 |
| 2017-08-02 | 2017-07-12 | 15 | 119 |
| 2017-08-02 | 2017-07-12 | 16 | 100 |
| 2017-08-02 | 2017-07-12 | 17 | 87 |
| 2017-08-02 | 2017-07-12 | 18 | 58 |
| 2017-08-02 | 2017-07-12 | 19 | 85 |
| 2017-08-02 | 2017-07-12 | 20 | 96 |
| 2017-08-02 | 2017-07-12 | 21 | 79 |
| 2017-08-02 | 2017-07-12 | 22 | 61 |
| 2017-08-02 | 2017-07-12 | 23 | 25 |
| 2017-08-02 | 2017-07-19 | 0 | 27 |
| 2017-08-02 | 2017-07-19 | 1 | 24 |
| 2017-08-02 | 2017-07-19 | 2 | 20 |
| 2017-08-02 | 2017-07-19 | 3 | 12 |
| 2017-08-02 | 2017-07-19 | 4 | 4 |
| 2017-08-02 | 2017-07-19 | 5 | 4 |
| 2017-08-02 | 2017-07-19 | 6 | 2 |
| 2017-08-02 | 2017-07-19 | 7 | 5 |
| 2017-08-02 | 2017-07-19 | 8 | 4 |
| 2017-08-02 | 2017-07-19 | 9 | 4 |
| 2017-08-02 | 2017-07-19 | 10 | 10 |
| 2017-08-02 | 2017-07-19 | 11 | 11 |
| 2017-08-02 | 2017-07-19 | 12 | 33 |
| 2017-08-02 | 2017-07-19 | 13 | 75 |
| 2017-08-02 | 2017-07-19 | 14 | 107 |
| 2017-08-02 | 2017-07-19 | 15 | 98 |
| 2017-08-02 | 2017-07-19 | 16 | 68 |
| 2017-08-02 | 2017-07-19 | 17 | 71 |
| 2017-08-02 | 2017-07-19 | 18 | 96 |
| 2017-08-02 | 2017-07-19 | 19 | 102 |
| 2017-08-02 | 2017-07-19 | 20 | 86 |
| 2017-08-02 | 2017-07-19 | 21 | 67 |
| 2017-08-02 | 2017-07-19 | 22 | 54 |
| 2017-08-02 | 2017-07-19 | 23 | 29 |
| 2017-08-02 | 2017-07-26 | 0 | 35 |
| 2017-08-02 | 2017-07-26 | 1 | 16 |
| 2017-08-02 | 2017-07-26 | 2 | 11 |
| 2017-08-02 | 2017-07-26 | 3 | 8 |
| 2017-08-02 | 2017-07-26 | 4 | 6 |
| 2017-08-02 | 2017-07-26 | 5 | 5 |
| 2017-08-02 | 2017-07-26 | 6 | 3 |
| 2017-08-02 | 2017-07-26 | 7 | 3 |
| 2017-08-02 | 2017-07-26 | 8 | 7 |
| 2017-08-02 | 2017-07-26 | 9 | 2 |
| 2017-08-02 | 2017-07-26 | 10 | 5 |
| 2017-08-02 | 2017-07-26 | 11 | 11 |
| 2017-08-02 | 2017-07-26 | 12 | 41 |
| 2017-08-02 | 2017-07-26 | 13 | 52 |
| 2017-08-02 | 2017-07-26 | 14 | 76 |
| 2017-08-02 | 2017-07-26 | 15 | 83 |
| 2017-08-02 | 2017-07-26 | 16 | 97 |
| 2017-08-02 | 2017-07-26 | 17 | 71 |
| 2017-08-02 | 2017-07-26 | 18 | 56 |
| 2017-08-02 | 2017-07-26 | 19 | 69 |
| 2017-08-02 | 2017-07-26 | 20 | 45 |
| 2017-08-02 | 2017-07-26 | 21 | 67 |
| 2017-08-02 | 2017-07-26 | 22 | 68 |
| 2017-08-02 | 2017-07-26 | 23 | 39 |
我非常接近。这是从4周前的每周每周产生小时数的条目。
我只需要得到这些小时总计在4天内总和,然后除以四。
这非常接近。我需要它在自定义的日期范围内回顾每天5周。我需要的是sub_selects和连接的组合来获得这个数量。我有一个这个子选择加入的版本,与我的5周回顾date_sub一起生成所有4天的正确总数,但有些日期报告3而不是4个日期,所以我需要做更多的观察。 但是,目前只能回顾并得到一个日期的平均值,而不是一个日期范围。我很快会再看一次。它非常接近。 – Joomsavvy
我已经使用了sub1的开始日期作为sub2的结束日期,所以如果你想要一个OVERALL 4周的跨度,那么落后的星期数将是3(假设你正在使用我的参数)。设置良好的可预测测试数据是证明这一点IMO的关键。 –
刚刚发现了新的变化,很快就会报告,TY! – Joomsavvy