Существует таблица транзакций, которая содержит датированные данные за 2006 - 2019 гг., Количество записей от нуля до многих за каждый месяц (сумма продажи). Требование - это оператор SQL, который за каждый месяц дает мне сумму продаж за последние двенадцать месяцев и количество отдельных месяцев, которые содержат значения.
Ниже показано, что SQL до сих пор (это немного мутно, потому что дата хранится в отдельной таблице, а дата должна исходить из пакета)
WITH monthly_totals AS
(SELECT
sum(t1.[Transaction_totals]) AS sum_of_sales,
CASE
WHEN t2.month_id % 100 < 10 AND t2.month_id/100 < 10 THEN CONCAT('200', t2.month_id % 100, '-0', t2.month_id / 100, '-01')
WHEN t2.month_id % 100 < 10 AND t2.month_id/100 >= 10 THEN CONCAT('200', t2.month_id % 100, '-', t2.month_id / 100, '-01')
WHEN t2.month_id % 100 >= 10 AND t2.month_id/100 < 10 THEN CONCAT('20', t2.month_id % 100, '-0',t2. month_id / 100, '-01')
ELSE CONCAT('20', t2.month_id % 100, '-', t2.month_id / 100, '-01')
END as date,
t2.month_id
FROM
TRANSACTION t1
INNER JOIN
BATCH t2 ON t1.batch_id = t2.batch_id
GROUP BY
CASE
WHEN t2.month_id % 100 < 10 AND t2.month_id/100 < 10 THEN CONCAT('200', t2.month_id % 100, '-0', t2.month_id / 100, '-01')
WHEN t2.month_id % 100 < 10 AND t2.month_id/100 >= 10 THEN CONCAT('200', t2.month_id % 100, '-', t2.month_id / 100, '-01')
WHEN t2.month_id % 100 >= 10 AND t2.month_id/100 < 10 THEN CONCAT('20', t2.month_id % 100, '-0',t2. month_id / 100, '-01')
ELSE CONCAT('20', t2.month_id % 100, '-', t2.month_id / 100, '-01')
END,
t2.month_id
)
SELECT
sum(sum_of_sales) AS sum_of_sales,
count(distinct month_id) as month_count,
date
FROM
monthly_totals
WHERE
date IN (select distinct month_id
from
vw_dimDate as d
where
date >= (
select
distinct(date)
from
dimDate
where
month_id = month_id
and dayNumber = 1) - 365
and
date <= (
select
distinct(date)
from
dimDate
where
month_id = month_id
and dayNumber = 1
)
)
GROUP BY
date
Но это вызывает следующую ошибку:
Подзапрос вернул более 1 значения. Это недопустимо, если подзапрос следует =,! =, <, <=,>,> = Или когда подзапрос используется в качестве выражения.
Для таблицы, охватывающей 13 лет, конечный продукт должен выглядеть примерно так:
2006-01-01: 2 382 823 долл. США [сумма продаж за 2005-01-01 - 2006-01-01], 1 [количество транзакций в разных месяцах]
2006-02-01 $ 4 382 823 [сумма продаж за 2005-02-01 - 2006-02-01], 2 [количество транзакций в разных месяцах]
2006-03-01 $ 4 382 823 [сумма продаж за 2005-03-01 - 2006-03-01], 3 [количество транзакций в разных месяцах]
...
2010-01-01: 23 323 204 долл. США [сумма продаж за 2009-01-01 - 2010-01-01], 12 [количество транзакций в разных месяцах]
2011-01-01: 12 938 823 долл. США [сумма продаж за 2009-02-01 - 2010-02-01], 12 [количество транзакций в разных месяцах]
и т.д ...
за каждый месяц в таблице