Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.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/4/postgresql/10.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
SQL:将月度销售额与过去四个月的销售额相加_Sql_Postgresql - Fatal编程技术网

SQL:将月度销售额与过去四个月的销售额相加

SQL:将月度销售额与过去四个月的销售额相加,sql,postgresql,Sql,Postgresql,我需要的是按中心和月份汇总销售额,并获得过去4个月的销售额 这是我的表格: center_id month_id sales_amt 1 201512 1000 1 201511 2000 1 201510 1500 1 201509 1700 1 201508 900 ... 这就是我需要的: center_id month_id

我需要的是按中心和月份汇总销售额,并获得过去4个月的销售额

这是我的表格:

center_id   month_id    sales_amt
1           201512      1000
1           201511      2000
1           201510      1500
1           201509      1700
1           201508      900
...
这就是我需要的:

center_id   month_id    sales_amt   sales_4_month
1           201512      1000        6200
1           201511      2000        6100
...

简单的方法。只需添加子查询来选择

SELECT 
  center_id, month_id, sales_amt, (
    SELECT SUM(sub.sales_amt) 
    FROM foo sub 
    WHERE sub.month_id >= base.month_id-4
  ) as sales_4_month
FROM foo base

您还可以使用CTE

您可以使用窗口功能来实现这一点:

select 
center_id, month_id, sales_amt,
(
sales_amt + 
lead (sales_amt,1,0) over (PARTITION BY center_id ORDER BY month_id desc) +
  lead (sales_amt,2,0) over (PARTITION BY center_id ORDER BY month_id desc) +
  lead (sales_amt,3,0) over (PARTITION BY center_id ORDER BY month_id desc)
) sales_4_month
from Sales

它应该比子查询快,但您不能忘记选择比您需要的多3个月!否则,lead函数将没有可计算的行。

是的,它应该快得多。当间隔在年之间时,这将有问题。您是否尝试了一些方法?展示你的作品!来自:“不要问:你还没有试图找到答案的问题(展示你的作品!)”