В настоящее время у меня есть запрос, настроенный через Unions [кодовый блок 1] для сбора данных.Он работает правильно, но очень неэффективно, чтобы повторять это много раз
Есть ли способ преобразовать это в цикл while в DB2?
Я пытался написать цикл while в [Code Block 2], но он не работает в DB2.
Я получаю синтаксическую ошибку в Code_block_2
В блоке кода 2 я хочу добавить 1 к переменным даты начала и окончания, чтобы следующий запрос выполнялся с новыми периодами времени (сохраненными как целые числа), например, 1-й раз будет между 201601 и 201701, второй раз будет между 201602 и201702. Я попытался настроить end_dt для печати с каждой строкой данных
Метод объединения работает, но я должен написать один и тот же кусок кода несколько раз.Цикл будет более эффективным
[кодовый блок 1 - Union (Works)]
select
1 as a.period,
a.name,
a.date
from
data_table
where
month between 201601 and 201701
union
select
1 as period,
a.name,
a.date
from
data_table a
where
a.month between 201602 and 201702 -- this is changing in a consistent pattern
union
select
1 as period,
a.name,
a.date
from
data_table a
where
a.month between 201603 and 201703
[кодовый блок 2 - с попыткой цикла]
Begin atomic
declare @end_dt integer default 201701;
declare @start_dt integer default 201601;
while @end_dt < 201712 do
--statement
select
@end_dt as period,
a.name,
a.date
from
data_table a
where
month between @start_dt and @end_dt;
-- add + 1 to variables
set @end_dt = @end_dt +1;
set @start_dt = @start_dt +1;
end while;
end;
здесьпример набора данных
(в базе данных)
имя - дата Джейн - 05.05.2016Джим - 3.06.2016Зак - 01.01.2016Джилл - 01.05.2016Джо - 01.01.2016Джеймс - 01.04.2016Зои - 02.02.2016
Вывод (ожидается, и результат блока кода 1.)
Период - Имя - дата201701 - Джейн - 5/2/2016201701 - Джим - 03.06.2016201701 - Зак - 01.01.2016201701 - Jill - 01.05.2016201701 - Джо - 01.01.2016201701 - Джеймс - 01.04.2016201701 - Zoe - 02.02.2016201702 - Джейн - 5/2/2016201702 - Джим - 3.06.2016201702 - Джилл - 01.05.2016201702 - Джеймс - 01.04.2016201702 - Зои - 02.02.2016
- обратите внимание, как даты 1 января 2016 года сочетаются с периодом 201702 годаЯ не уверен на 100% в версии DB2, но она совместима с DB2 для Linux Unix и Windows 10.5 и z / OS