【发布时间】:2010-05-26 06:02:37
【问题描述】:
我正在编写一个简单的数据仓库,它允许我查询表以观察数据的周期性(比如每周)变化,以及数据变化的变化(例如每周销售额的每周变化)。
为了简单起见,我将展示我在这里使用的表格的非常简化(几乎是微不足道的)版本。销售数据表是一个视图,结构如下:
CREATE TABLE sales_data (
sales_time date NOT NULL,
sales_amt double NOT NULL
)
出于这个问题的目的。我省略了您希望看到的其他字段 - 例如 product_id、sales_person_id 等,因为它们与这个问题没有直接关系。 AFAICT,查询中将使用的唯一字段是 sales_time 和 sales_amt 字段(除非我弄错了)。
我还有一个日期维度表,结构如下:
CREATE TABLE date_dimension (
id integer NOT NULL,
datestamp date NOT NULL,
day_part integer NOT NULL,
week_part integer NOT NULL,
month_part integer NOT NULL,
qtr_part integer NOT NULL,
year_part integer NOT NULL,
);
将日期划分为报告范围。
我需要编写允许我执行以下操作的查询:
返回指定期间 week on week sales_amt 中的变化。例如今天的销售额和 N 天前的销售额之间的变化 - 其中 N 是一个正整数(在这种情况下 N == 7)。
返回指定时间段内sales_amt 的change in change。在 (1) 中。我们计算了每周的变化。现在我们想知道这种变化与 上周计算的(每周)变化。
然而,我被困在这一点上,因为 SQL 是我最弱的技能。如果 SQL 大师能解释我如何以与 DB 无关的方式(即使用 ANSI SQL)编写这些查询,我将不胜感激。
【问题讨论】:
-
如果您要发布详细的 ERD,将会有所帮助。你的事实表似乎有点不寻常。事实表中的行是什么?一笔交易还是某种累积价值?假设我们在下午 2 点以 2 美元的价格出售一根巧克力棒,在下午 3 点以 2 美元的价格出售另一根——销售额的变化应该是什么意思?
标签: sql data-warehouse ansi-sql