У меня есть две таблицы со следующей схемой:
CREATE TABLE sales_data (
sales_time date NOT NULL,
product_id integer NOT NULL,
sales_amt double NOT NULL
);
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,
);
Я хочу написать два типа запросов, которые позволят мне рассчитать:
- период смены периода (например, неделя на неделе)
- изменение периода при изменении периода (например, изменение недели при изменении недели)
Я бы предпочел написать это в ANSI SQL, поскольку я не хочу привязываться к какой-либо конкретной базе данных.
[Изменить]
В свете некоторых комментариев, если мне нужно будет привязать одну базу данных (с точки зрения диалекта SQL), это должен быть PostgreSQL
Запросы, которые я хочу написать, имеют форму (конечно, псевдо SQL):
Query Type 1 (Period on Period Change)
=======================================
a). select product_id, ((sd2.sales_amt - sd1.sales_amt)/sd1.sales_amt) as week_on_week_change from sales_data sd1, sales_data sd2, date_dimension dd where {SOME CRITERIA)
b). select product_id, ((sd2.sales_amt - sd1.sales_amt)/sd1.sales_amt) as month_on_month_change from sales_data sd1, sales_data sd2, date_dimension dd where {SOME CRITERIA)
Query Type 2 (Change in Period on Period Change)
=================================================
a). select product_id, ((a2.week_on_week_change - a1.week_on_week_change)/a1.week_on_week_change) as change_on_week_on_week_change from
(select product_id, ((sd2.sales_amt - sd1.sales_amt)/sd1.sales_amt) as week_on_week_change from sales_data sd1, sales_data sd2, date_dimension dd where {SOME CRITERIA)
as a1),
(select product_id, ((sd2.sales_amt - sd1.sales_amt)/sd1.sales_amt) as week_on_week_change from sales_data sd1, sales_data sd2, date_dimension dd where {SOME CRITERIA) as a2)
WHERE {SOME OTHER CRITERIA}