Не получается вывод, как ожидалось
Я работаю над SAP HANA и не могу понять, как получить ожидаемый результат. Позвольте мне пролить свет на получение результата. Я работаю над процедурой, и моя работа состоит в том, чтобы вставить данные в эту конкретную таблицу, которую я успешно вставляю, но данные не корректны. У меня есть 3 столбца в моем выводе с именем:- report_date, report_week, week_end. Если предположить, что я начинаю свои данные с 2010-01-01, конец недели должен начинаться с 2010-01-06. И таким образом я хочу, чтобы мои данные были получены с 2010 по 2030 год. Они должны показывать начало каждой недели в report_date и начало каждой недели в week_end. Роль report_week состоит в том, чтобы показать, какая неделя продолжается в настоящее время. Моя ошибка вывода: - введите описание изображения здесь
У меня есть моя процедура, которую я публикую ниже: -
create procedure bhavya.zz_get_series()
LANGUAGE SQLSCRIPT
SQL SECURITY INVOKER
--DEFAULT SCHEMA <default_schema_name>
AS
LV_START_DATE date := '2010-01-01' ;
LV_END_DATE date := current_date ;
LV_WEEK_END NVARCHAR(10) := 'FRIDAY';
lv_report_date Date ;
Begin
TT_SERIES = (SELECT GENERATED_PERIOD_START AS REPORT_DATE,
week(add_days(generated_period_start , 2)) as
report_week, current_date as week_end --added ABHOOT
FROM SERIES_GENERATE_DATE ( 'INTERVAL 1 DAY', :LV_START_DATE,
ADD_DAYS(coalesce(current_date,:LV_END_DATE), 1)));
TT_WEEK_END = select report_week, max(report_date) as week_end
from :TT_SERIES
group by report_week ;
insert into "BHAVYA"."AFS_BASE.KPI.TABLES::DB_WEEK_SERIES"
(REPORT_DATE,REPORT_WEEK,WEEK_END)
select S.report_date, w.report_week, w.week_end
from :TT_SERIES S
left join :TT_WEEK_END W
on w.report_week = s.report_week;
end;
call bhavya.zz_get_series
Любая помощь очень ценится.
1 ответ
Я думаю, что проблема здесь:
week (add_days (generate_period_start, 2)) вернет номер недели в течение года, поэтому он всегда будет между 1 и 52. Поскольку неделя N будет происходить в 2010, 2011,...,2017 году, максимальное значение (report_date) всегда будет быть в прошлом году это происходит (так или 2016 или 2017).
TT_WEEK_END = выбрать report_week, max(report_date) в качестве week_end из:TT_SERIES group by report_week;
Таким образом, вы должны извлечь год из отчетной даты и включить его в группу с помощью выбора TT_WEEK_END, а также в предложении соединения, используемом для оператора INSERT.