2

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

用户身份 日期 数量
1 2021-01-03 10
1 2021-01-10 20
1 2021-02-07 30

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

描述 范围 预期结果
一月的第一周 1日(周五)至3日(周日) 10
一月 1 日至 31 日 30
二月 1日至28日 30

一些限制:

  1. 我不知道预先的日期(消费者需要日历周期或滚动周期),所以我认为我不能使用SUMand创建策划查询CASE?我在这里看到了一个例子。
  2. 在与数据库交互时,我还需要使用存储过程,因此我无法SELECT从 API 动态创建语句。

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

4

1 回答 1

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

这个查询会执行得相当好吗?或者有没有更好的方法来做到这一点?

于 2021-03-05T15:56:48.173 回答