Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.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

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
Postgresql中的日期限制运行平均值-如何划分为四周_Postgresql_Date - Fatal编程技术网

Postgresql中的日期限制运行平均值-如何划分为四周

Postgresql中的日期限制运行平均值-如何划分为四周,postgresql,date,Postgresql,Date,我有一张表,上面有销售日期(每周:每周六)、商品ID和销售额。我想要一个平均四周的跑步记录。我需要将数据按ID划分为四周的部分,但我无法确定如何执行语法 样本表: ID date value four_wk_average <p>123 04/05/2019 1640.88 1640.88 <p>123 11/05/2019 2093.4 1867.14 <p>123 18/05/2019 2671.57 2135.28 <p&

我有一张表,上面有销售日期(每周:每周六)、商品ID和销售额。我想要一个平均四周的跑步记录。我需要将数据按ID划分为四周的部分,但我无法确定如何执行语法

样本表:

ID  date    value   four_wk_average
<p>123  04/05/2019  1640.88 1640.88
<p>123  11/05/2019  2093.4  1867.14
<p>123  18/05/2019  2671.57 2135.28
<p>123  25/05/2019  2034.6  2110.11
<p>123  01/06/2019  1564.62 2001.01
<p>123  08/06/2019  2143.29 2024.73
<p>123  15/06/2019  2007    2022.19
<p>123  22/06/2019  2329.35 2060.59
<p>123  29/06/2019  2794.32 2142.11
<p>123  06/07/2019  3380.05 2265.91
正确的值应该是

ID  date    value   four_wk_average
<p>123  04/05/2019  1640.88 1640.88
<p>123  11/05/2019  2093.4  1867.14
<p>123  18/05/2019  2671.57 2135.28
<p>123  25/05/2019  2034.6  2110.11
<p>123  01/06/2019  1564.62 2091.05
<p>123  08/06/2019  2143.29 2103.52
<p>123  15/06/2019  2007    1937.38
<p>123  22/06/2019  2329.35 2011.07
<p>123  29/06/2019  2794.32 2318.49
<p>123  06/07/2019  3380.05 2627.68
ID日期值四周平均值
123 2019年5月4日1640.88 1640.88
123 2019年5月11日2093.4 1867.14
123 2019年5月18日2671.57 2135.28
123 2019年5月25日2034.6 2110.11
12301/06/2019 1564.62 2091.05
123 2019年6月8日2143.29 2103.52
123 2019年6月15日2007年1937.38
123 2019年6月22日2329.35 2011.07
123 2019年6月29日2794.32 2318.49
12306/07/2019 3380.05 2627.68
我认为我的分区将我的间隔部分作为布尔测试,并返回TRUE——我不知道如何在窗口函数中表示日期范围

谢谢大家!

方法1:这适用于Postgres 11+和每周多个记录

SELECT
    *,
    AVG(value) OVER (ORDER BY the_date RANGE BETWEEN interval '4 weeks - 1 day' PRECEDING AND CURRENT ROW)
FROM
    sales
间隔为4周:4周减去1天再加上当天


方法2:这也适用于研究生

方法1:这适用于Postgres 11+和每周多个记录

SELECT
    *,
    AVG(value) OVER (ORDER BY the_date RANGE BETWEEN interval '4 weeks - 1 day' PRECEDING AND CURRENT ROW)
FROM
    sales
间隔为4周:4周减去1天再加上当天



方法2:这也适用于Postgres Lifesaver:我使用了方法2,它工作得非常好。还感谢您的进一步阅读-我曾试图在互联网上搜索如何做到这一点,但我找不到任何东西。再次感谢。嗨!我很抱歉没有早点回答。当我将所有数据放在一起时,这不起作用-在这种情况下,数据按国家和ID分组。您的三个选项中哪一个最适合这种情况?以Excel的方式思考,我想在ID和国家匹配的条件下做一个平均。或者我可以对我正在执行此操作的子查询进行任何排序,以使前面的行语法正常工作?非常感谢。不过,我当然可以帮你。但在这种情况下,我真的需要样本数据和预期的输出以及。所以,请尝试创建一个小提琴(就像我在回答中所做的那样)和/或打开一个全新的问题!救命恩人:我用了方法2,效果很好。还感谢您的进一步阅读-我曾试图在互联网上搜索如何做到这一点,但我找不到任何东西。再次感谢。嗨!我很抱歉没有早点回答。当我将所有数据放在一起时,这不起作用-在这种情况下,数据按国家和ID分组。您的三个选项中哪一个最适合这种情况?以Excel的方式思考,我想在ID和国家匹配的条件下做一个平均。或者我可以对我正在执行此操作的子查询进行任何排序,以使前面的行语法正常工作?非常感谢。不过,我当然可以帮你。但在这种情况下,我真的需要样本数据和预期的输出以及。所以,请尝试创建一个小提琴(就像我在回答中所做的那样)和/或打开一个全新的问题!
SELECT
    *,
    AVG(value) OVER (ORDER BY the_date ROWS BETWEEN 3 PRECEDING AND CURRENT ROW)
FROM
    sales
SELECT 
    s1.*,
    (SELECT AVG(s2.value)
     FROM sales s2
     WHERE s2.the_date <= s1.the_date
          AND s2.the_date > s1.the_date - interval '4 weeks')
FROM sales s1;