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
时间间隔/行上的SQL求和_Sql_Postgresql_Sum - Fatal编程技术网

时间间隔/行上的SQL求和

时间间隔/行上的SQL求和,sql,postgresql,sum,Sql,Postgresql,Sum,下面的代码 SELECT distinct DATE_PART('year',date) as year_date, DATE_PART('month',date) as month_date, count(prepare_first_buyer.person_id) as no_of_customers_month FROM ( SELECT DATE(bestelldatum) ,person_id ,ROW_NUMBER() OVER (PARTITION BY person_id OR

下面的代码

SELECT distinct DATE_PART('year',date) as year_date,
DATE_PART('month',date) as month_date,
count(prepare_first_buyer.person_id) as no_of_customers_month
FROM
(
SELECT DATE(bestelldatum)  ,person_id
,ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY person_id)
FROM ani.bestellung
) prepare_first_buyer
WHERE row_number=1
GROUP BY DATE_PART('year',date),DATE_PART('month',date)
ORDER BY DATE_PART('year',date),DATE_PART('month',date)
返回此表:

| year_date | month_date | no_of_customers_month |
|:--------- |:----------:| ---------------------:|
| 2017      | 1          | 2                     |
| 2017      | 2          | 5                     |
| 2017      | 3          | 4                     |
| 2017      | 4          | 8                     |
| 2017      | 5          | 1                     |
| .         | .          | .                     |
| .         | .          | .                     |
其中,als 3是数值。 我现在需要一个新的专栏,我总结了12个月前“无客户月”的所有值。 e、 g

其中,23是2019-1年至2018-1年期间“每月无客户”的总和


Thx以获取帮助。

您可以使用窗口功能:

SELECT DATE_TRUNC('month', date) as yyyymm,
       COUNT(*) as no_of_customers_month,
       SUM(COUNT(*)) OVER (ORDER BY DATE_TRUNC('month', date) RANGE BETWEEN '11 month' PRECEDING AND CURRENT ROW)
FROM (SELECT DATE(bestelldatum), person_id,
             ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY person_id)
      FROM ani.bestellung
     ) b
WHERE row_number = 1
GROUP BY yyyymm
ORDER BY yyyymm;
注意:这使用
date\u trunc()
检索年/月作为日期,允许使用
range()
。我还发现日期比把年和月分开列更方便

某些版本的Postgres不支持
范围
窗口框架。假设您有每个月的数据,您可以使用

SELECT DATE_TRUNC('month', date) as yyyymm,
       COUNT(*) as no_of_customers_month,
       SUM(COUNT(*)) OVER (ORDER BY DATE_TRUNC('month', date) ROWS BETWEEN 11 PRECEDING AND CURRENT ROW)
FROM (SELECT DATE(bestelldatum), person_id,
             ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY person_id)
      FROM ani.bestellung
     ) b
WHERE row_number = 1
GROUP BY yyyymm
ORDER BY yyyymm;

您可以使用窗口功能:

SELECT DATE_TRUNC('month', date) as yyyymm,
       COUNT(*) as no_of_customers_month,
       SUM(COUNT(*)) OVER (ORDER BY DATE_TRUNC('month', date) RANGE BETWEEN '11 month' PRECEDING AND CURRENT ROW)
FROM (SELECT DATE(bestelldatum), person_id,
             ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY person_id)
      FROM ani.bestellung
     ) b
WHERE row_number = 1
GROUP BY yyyymm
ORDER BY yyyymm;
注意:这使用
date\u trunc()
检索年/月作为日期,允许使用
range()
。我还发现日期比把年和月分开列更方便

某些版本的Postgres不支持
范围
窗口框架。假设您有每个月的数据,您可以使用

SELECT DATE_TRUNC('month', date) as yyyymm,
       COUNT(*) as no_of_customers_month,
       SUM(COUNT(*)) OVER (ORDER BY DATE_TRUNC('month', date) ROWS BETWEEN 11 PRECEDING AND CURRENT ROW)
FROM (SELECT DATE(bestelldatum), person_id,
             ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY person_id)
      FROM ani.bestellung
     ) b
WHERE row_number = 1
GROUP BY yyyymm
ORDER BY yyyymm;