gpt4 book ai didi

sql - 对行日期的前几个月值求和

转载 作者:行者123 更新时间:2023-12-05 04:00:13 25 4
gpt4 key购买 nike

我需要一个 SQL Server 查询来返回如下内容:

Client_ID | REF_DATE | SALES | SALES_PREVIOUS_6_MONTHS | SALES_NEXT_6_MONTHS

但问题是我的基准日期不是“今天”或类似的日期。但实际上是“REF_DATE”。

因此,如果客户在 2015 年 7 月购买了东西,我想知道他在这个引用月(2015 年 7 月)以及自 2015 年 7 月起的前 6 个月和后 6 个月内花了多少钱。我需要为 8 月等排队。

我使用的是发票数据库,其中包含月份第一天的汇总信息。

我尝试使用 CASE WHEN 语句,但由于它只针对我的条件返回“FALSE”,因此返回 0。

SELECT
Client_ID,
REF_DATE,
SUM(SALES),
CASE
WHEN REF_DATE BETWEEN DATEADD(MONTH, -6, REF_DATE) AND DATEADD(MONTH, -1, REF_DATE)
THEN SUM(SALES)
ELSE 0.0
END AS SALES_PREVIOUS_6_MONTHS,
CASE
WHEN REF_DATE BETWEEN DATEADD(MONTH, +1, REF_DATE) AND DATEADD(MONTH, +6, REF_DATE)
THEN SUM(SALES)
ELSE 0.0
END AS SALES_NEXT_6_MONTHS
FROM
dbo.invoices        
GROUP BY
Client_ID, REF_DATE

我想要的输出是这样的:

+------------+------------+---------+---------------------------+----------------------+
| Client_ID | REF_DATE | SALES | SALES_PREVIOUS_6_MONTHS | SALES_NEXT_6_MONTHS |
+------------+------------+---------+---------------------------+----------------------+
| 1 | 01/07/2014 | 0 | 0 | 1234 |
| 1 | 01/08/2014 | 0 | 0 | 3579 |
| 1 | 01/09/2014 | 0 | 0 | 7035 |
| 1 | 01/10/2014 | 0 | 0 | 11602 |
| 1 | 01/11/2014 | 0 | 0 | 12836 |
| 1 | 01/12/2014 | 0 | 0 | 17403 |
| 1 | 01/01/2015 | 1234 | 0 | 24059 |
| 1 | 01/02/2015 | 2345 | 1234 | 21714 |
| 1 | 01/03/2015 | 3456 | 3579 | 18258 |
| 1 | 01/04/2015 | 4567 | 7035 | 13691 |
| 1 | 01/05/2015 | 1234 | 11602 | 12457 |
| 1 | 01/06/2015 | 4567 | 12836 | 7890 |
| 1 | 01/07/2015 | 7890 | 17403 | 0 |
| 1 | 01/08/2015 | 0 | 24059 | 0 |
| 1 | 01/09/2015 | 0 | 21714 | 0 |
| 1 | 01/10/2015 | 0 | 18258 | 0 |
| 1 | 01/11/2015 | 0 | 13691 | 0 |
| 1 | 01/12/2015 | 0 | 12457 | 0 |
+------------+------------+---------+---------------------------+----------------------+

最佳答案

如果您每个月都有每个客户的记录:

SELECT Client_ID, REF_DATE, SUM(SALES),
SUM(SUM(SALES)) OVER (PARTITION BY Client_id ORDER BY REF_DATE ROWS BETWEEN 6 PRECEDING AND 1 PRECEDING) as SALES_PREVIOUS_6_MONTHS,
SUM(SUM(SALES)) OVER (PARTITION BY Client_id ORDER BY REF_DATE ROWS BETWEEN 1 FOLLOWING AND 6 FOLLOWING) as SALES_NEXT_6_MONTHS,
FROM dbo.invoices i
GROUP BY Client_ID, REF_DATE;

如果您没有每个月每个客户的记录,那么逻辑会稍微复杂一些。

关于sql - 对行日期的前几个月值求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56497711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com