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
我正在尝试查询我的数据库 (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