在 SQL 中汇总多个日期范围内的数据的最佳方法是什么?

时间:2021-03-05 13:06:16

标签: sql-server sum

我有一个包含用户 ID购买金额日期的表格。我需要为同一用户计算多个时期的总和。例如,给定:

<头>
用户 ID 日期 金额
1 2021-01-03 10
1 2021-01-10 20
1 2021-02-07 30

从 API 中,对于同一个用户,我可能需要求和并返回以下所有范围:

<头>
说明 范围 预期结果
一月的第一周 第一(周五)至第三(周日) 10
一月 1 至 31 日 30
二月 1 日至 28 日 30

一些限制:

  1. 我事先不知道日期(消费者需要日历期间或滚动期间),所以我认为我无法使用 SUMCASE 创建精选查询?我看到了一个 example of this here.
  2. 在与数据库交互时,我还需要使用存储过程,因此我无法从 API 动态创建 SELECT 语句。

我没有很多编写 SQL 的经验,但我想有一个查询来计算所有总数比单独计算总和更好吗?有什么建议吗?

1 个答案:

答案 0 :(得分:0)

谢谢@Larnu,这似乎有效,其中 Range 作为表传入,而 Purchases 是问题中列出的表:

SELECT r.StartDate,
       r.EndDate,
       SUM(p.Amount) AS Total
FROM Range r
JOIN Purchases p ON p.Date >= r.StartDate
                AND p.Date < r.EndDate
GROUP BY r.StartDate, r.EndDate;

结果:

<头>
开始日期 结束日期 总计
2021-01-01 00:00:00.000 2021-01-04 00:00:00.000 10
2021-01-01 00:00:00.000 2021-02-01 00:00:00.000 30
2021-02-01 00:00:00.000 2021-03-01 00:00:00.000 30

此查询的性能是否合理?或者有没有更好的方法来做到这一点?

相关问题