SQL:汇总行或其他 table 中定义的日期范围之间的销售额

SQL: Summing sales between date range defined in row or other table

我正在尝试查询我的数据库 (Cloudera Hadoop),但无法全神贯注于我需要做的事情。我正在尽我最大的努力清楚地问这个问题,但我已经不知所措了。以防万一,我添加了屏幕截图以帮助可视化问题和预期结果。

如果需要任何其他信息,请发表评论。我尽量简化了,但也许我漏掉了什么。

我有 3 个 tables。

Cal Table 具有 2018 年所有不同的周,格式为 YYYYWW。 它还包含月初至今的开始周和结束周。 它还包含其他日期间隔(季度至今、年初至今等),但为简单起见,我将它们从问题中排除。

POS table 包含我的事实。

Store Table 包含商店属性。

我正在尝试获得以下输出:

我正在努力填充 MTD Sales 和其他日期范围。

SELECT
    pos.corp_year_week,
    pos.store,
    store.rep,
    sum(pos.sales) sales,
    ??????
FROM
    pos inner join cal on pos.corp_year_week = cal.corp_year_week
    inner join store on pos.store = store.store
GROUP BY 
    pos.corp_year_week,
    pos.store,
    store.rep

我正在考虑为我所有的星期做大量的 CASE 语句并为每个 corp_year_week 定义开始日期和结束日期之间的想法,但我确信这不是正确的方法.

任何帮助都会非常感激。谢谢

我使用子查询来获取 Cal

中给定时间段的总和
SELECT p.corp_year_week, p.store, s.rep, p.sales, mtd.mtd_sales
FROM Pos p,
     (SELECT c.mtd_end, p2.store, SUM(p2.sales) mtd_sales
      FROM Pos p2, Cal c
      WHERE p2.corp_year_week between c.mtd_start and mtd_end
        AND p2.corp_year_week <= c.corp_year_week
      GROUP BY c.mtd_end, p2.store) AS mtd,
     Store s 
WHERE s.store = p.store
  AND mtd.mtd_end = p.corp_year_week
  AND mtd.store = p.store
ORDER BY p.store ASC, p.corp_year_week ASC 

这是在 MariaDb (MySql) 上测试的,但它非常标准 SQL