Я перемещаю нагрузку кода из MySQL в BigQuery, и ряд наших текущих отчетов ссылается на измерение даты, чтобы подсчитать количество выходных и праздничных дней между началом и концом. Я просмотрел много других ответов здесь, и основное предложение, похоже, заключается в использовании перекрестного соединения, но я потратил полдня или около того, играя с разными способами сделать это, и просто не могу это сделать. работать из-за логи c примерно в разные даты? Я поместил основной фрагмент кода ниже - может ли кто-нибудь предложить лучший способ перенести его на BigQuery? Я все время получаю сообщение об ошибке «LEFT OUTER JOIN не может использоваться без условия, которое является равенством полей с обеих сторон соединения»
Date Table Layout:
dateKey int
fullDate date (dd-mm-yyyy format)
isHoliday tinyint
isWeekend tinyint
... и многие другие поля, не относящиеся к этому запросу . Одна строка для каждой даты с 1950 по 2200.
select
purchaseOrders.orderID,
purchaseOrders.orderExpectedDate,
purchaseOrders.orderDeliveredDate,
purchaseOrders.orderCompletedDate,
(dateDelivered.dateKey - dateExpected.dateKey) as daysLate,
count(distinct dateExcluded.dateKey) as daysToExclude
from
`warehouse.purchaseOrders` as purchaseOrders
inner join `warehouse.dim_date` as dateExpected
on date(purchaseOrders.orderExpectedDate) = dateExpected.fullDate
inner join `warehouse.dim_date` as dateDelivered
on date(purchaseOrders.orderDeliveredDate) = dateDelivered.fullDate
left outer join `warehouse.dim_date` as dateExcluded
on ( (dateExpected.dateKey < dateDelivered.dateKey
and dateExcluded.dateKey >= dateExpected.dateKey
and dateExcluded.dateKey < dateDelivered.dateKey)
or (dateDelivered.dateKey < dateExpected.dateKey
and dateExcluded.dateKey >= dateDelivered.dateKey
and dateExcluded.dateKey < dateExpected.dateKey)
)
and (dateExcluded.isHoliday = 1 or dateExcluded.isWeekend = 1)
Очевидно, имена таблиц были изменены для простоты, и мы применяем различные условия к этому основному блоку, чтобы ограничить диапазон дат рассматриваемых заказов на покупку, и это также используется очень похожим образом для таблиц, отличных от заказов на покупку, но бит «dateExcluded» SQL широко используется во многих отчетах, поэтому мне нужно найти лучший способ воспроизвести это!
Спасибо заранее