У меня есть Date Dimension
, в котором есть столбец даты (с датами с 2010 по 2020 год) вместе с битовым столбцом Isworkday
(который равен 0 или 1). Все праздники рассчитываются и предварительно заполняются в измерении.
Теперь у меня есть таблица с столбцами start_date
и end_date
, и мне нужно рассчитать sum_of_workdays
в этих двух диапазонах дат. с использованием измерения даты.
(Я знаю, что могу создать функцию, которая принимает дату начала и дату окончания и возвращает сумму рабочих дней с использованием измерения даты, но снежинка действительно неэффективна с функциями, поэтому я хочу делать подзапросы или объединяется или что-то в этом роде)
Это функция, которую я сейчас использую:
create or replace function Sum_Of_WorkDays(start_date TIMESTAMP, end_date TIMESTAMP)
returns int
as--to get sume of workdays in a given date range
$$
SELECT sum(ISWORKDAY)
FROM DATE_DIMENSION
WHERE "DATE" BETWEEN start_date AND end_date
$$
;
И ниже показано, как я вызываю функцию из таблицы для вычисления суммы, но занимает много времени, если есть joins и cte, задействованные в запросе ::
select Sum_Of_WorkDays(start_date,end_date) from table
Любой эффективный запрос для него, кроме использования функции?
Заключение: завершено использование Left join для каждого вычисления суммы для его оптимизации. Снежинка, по-видимому, иногда не очень хороша в оптимизации запросов.