2015-07-02 88 views
1

我的头两个星期六月销售数据,周一日期即6月1日,6月8日低于每周平均报告:红移

日期| count

2015-06-01 03:25:53 | 1

2015-06-01 03:28:51 | 1

2015-06-01 03:49:16 | 1

2015-06-01 04:54:14 | 1

2015-06-01 08:46:15 | 1

2015-06-01 13:14:09 | 1

2015-06-01 16:20:13 | 5

2015-06-01 16:22:13 | 1

2015-06-01 16:27:07 | 1

2015-06-01 16:29:57 | 1

2015-06-01 19:16:45 | 1

2015-06-08 10:54:46 | 1

2015-06-08 15:12:10 | 1

2015-06-08 20:35:40 | 1

我需要查找给定范围内发生的每周平均销售额。

复杂查询:

(some_manipulation_part), ifact as 
    ( select date, sales_count from final_result_set 
) select date_part('h',date)) as h , 
     date_part('dow',date)) as day_of_week , 
     count(sales_count) 
    from final_result_set 
    group by h, dow. 

输出:

H | day_of_week |计数

3 | 1 | 3
4 | 1 | 1
8 | 1 | 1
10 | 1 | 1
13 | 1 | 1
15 | 1 | 1
16 | 1 | 8
19 | 1 | 1
20 | 1 | 1

如果我尝试将avg应用于上述最终结果,实际上并没有获取正确的答案!

(some_manipulation_part), ifact as 
( select date, sales_count from final_result_set 
) select date_part('h',date)) as h , 
     date_part('dow',date)) as day_of_week , 
     avg(sales_count) 
    from final_result_set 
    group by h, dow. 

h | day_of_week |计数

3 | 1 | 1

4 | 1 | 1
8 | 1 | 1
10 | 1 | 1
13 | 1 | 1
15 | 1 | 1
16 | 1 | 1
19 | 1 | 1
20 | 1 | 1

所以我在给定的范围内有两个星期一,实际上并没有被它分开。我甚至不确定在红移内发生了什么。

+0

创建一个'最小,完整,可验证示例'(http://stackoverflow.com/help/mcve)。例如,你可以从28天的事件中获得结果并将它们推送到临时表中。然后,您可以在临时表上运行最外层的查询,但也可以为我们提供示例输入,实际输出和预期输出。 – MatBailie

+0

更新后的输出,请帮助我! – ErRoR

+0

不知道我理解您的预期输出。例如;您在16小时有8次销售,但您的预期产出是1?不应该平均为4?另外,你提到一个日期范围,我们应该如何知道该范围是什么?如果范围是1日至21日,但15日(范围内的第3个星期一)没有任何价值,我们怎么知道除以3而不是2? – MatBailie

回答

1

要获得“每周平均数”使用date_trunc()

SELECT date_trunc('week', my_date_column) as week 
    , avg(sales_count) AS avg_sales 
FROM final_result_set 
GROUP BY 1; 

我希望你实际上并没有使用date作为名称为您的日期列。它是SQL中的保留字和基本类型名称,不要将其用作标识符。

如果按星期几组(DOW)计算,平均每个工作日的平均值为。星期日为0.(使用ISODOW可获得星期日7)

+0

它也提取错误的答案! – ErRoR