Итак, я пытаюсь получить данные из моей БД за последние 12 месяцев. У меня очень большая хранимая процедура, в которой я сначала рассчитал данные, не зависящие от временного интервала Во-первых, на моем SP я вычисляю один контейнер, где я получаю некоторые данные, такие как год, месяц, идентификатор и т. Д. c. Остальные расчеты основаны на этих данных (id, месяц, год).
Теперь мой начальник решил рассчитывать только данные только за последние 12 месяцев. Но я не могу сосредоточиться на этом. Я думал о создании рекурсивного CTE (Common Table Expression), где я вычисляю только последние 12 месяцев. Может быть, у вас, ребята, другое мнение. Позвольте мне показать вам мой начальный запрос. :
SELECT DISTINCT Year, Month, BId, DCode, ParentB_ID AS [PId]
FROM [s].SK k
join Businesses b on b.id = k.BId
left join AD d on k.BId = d.DID
WHERE SName = 'New Test'
Этот запрос возвращает мне это:
Year Month BId DCode PId
---- ----- ---- ----- ---
2018 12 12 NULL NULL
2018 12 20 NULL 1
2018 12 33 NULL 26
2018 12 19 NULL 20
То, что предполагается вернуть сейчас, это только данные из год = 2019 и месяц = 3 до сих пор.
Я пытался сделать следующее:
;WITH ACCC
AS
(
SELECT DISTINCT Year, Month, BId, d.DCode, P_ID AS [ParentId]
FROM [s].SK k
join Businesses b on b.id = k.BId
left join AD d on k.BId = d.D_ID
WHERE SName = 'New Test'
//AND add here the logic for selecting data only for the last 12 months.
//Starting from current and ascending
CROSS JOIN
SELECT DISTINCT Year, Month, BId, d.DCode, P_ID AS [ParentId]
FROM [s].SK s
INNER JOIN ACCC P
ON P.BId = s.D_ID
)
SELECT Year, Month, BId, d.DCode, P_ID AS [ParentId]
FROM AC
Я на правильном пути с этим CTE. Есть ли другой путь?
Я действительно борюсь с этим парнем. Любая помощь, я был бы очень признателен. Заранее большое спасибо:)