У меня есть запрос, который требует сравнения двух дат в выписке дела. Как определить, какие типы данных лучше всего подходят для выполнения этого запроса?
Строка
Дата
Метка времени
Вот пример запроса:
select customer_name, segment, month
, count(distinct case when visit_date <= month_end
and mbr_is_active
then mbr_id
else null end) as mbr_visitors_cum
from visit_tmp
group by customer_name, segment, month
;
У меня были поля даты, сохраненные в виде строки, и все шло хорошо. Теперь они хотят с начала года и число посещений за 12 месяцев, поэтому вышеприведенное становится:
select customer_name, segment, month
, count(distinct case when visit_date <= month_end
and mbr_is_active
then mbr_id
else null end) as mbr_visitors_cum
, count(distinct case when visit_date <= month_end
and substr(visit_date,1,4) = substr(month_end,1,4)
and mbr_is_active
then mbr_id
else null end) as mbr_visitors_ytd
, count(distinct case when visit_date <= month_end
and visit_date > add_months(month_end,-12)
and mbr_is_active
then mbr_id
else null end) as mbr_visitors_r12m
from visit_tmp
group by customer_name, segment, month
;
Теперь процесс занимает намного больше времени. Я думаю, что если я преобразую поля visit и month_end в дату, они будут обрабатываться быстрее, но кроме часов, как вы узнаете?