У меня есть запрос, в котором я определяю общее status
для определенного дня на основе агрегирования данных по дате UTC в BigQuery, чтобы полученные данные имели следующую форму:
date status
---- ------
28-feb-2019 0
01-mar-2019 1
Вот запрос, где sample_date_time
- это дата UTC в BigQuery.@startDateTime
и @endDateTime
в настоящее время передаются как даты UTC, которые всегда представляют дневную границу UTC, например:
@startDateTime = '2019-02-28T00:00:00.000Z'
@endDateTime = '2019-03-01T00:00:00.000Z'
select CAST(sample_date_time AS DATE) as date,
(case when sum(case when status_code >> 0 = 0 then 1 else 0 end) > 0
then 0
else
case when sum(case when status_code >> 0 = 1 then 1 else 0 end) = 1
then 1
end
end) as status
from (
with data as
(
select
sample_date_time,
status_code
from `my.table`
where sample_date_time between @startDateTime and @endDateTime
order by sample_date_time
)
select sample_date_time, status_code
from data
)
group by date
order by date
Мне нужнопреобразовать мой запрос, чтобы вместо этого он мог агрегировать данные на основе дневных границ для данного часового пояса .Запрос должен возвращать упорядоченную последовательность со столбцом, который представляет номер дня относительно данного часового пояса и предоставленного диапазона дат.Чтобы уточнить, мне нужны данные в следующей форме:
day status
---- ------
1 0
2 1
@startDateTime
и @endDateTime
будут переданы как даты ISO_8601, которые всегда будут представлять дневную границу в данном часовом поясе, и будутв формате, который предоставляет смещение часового пояса относительно UTC, например:
@startDateTime = '2019-02-28T00:00:00+11:00'
@endDateTime = '2019-03-01T00:00:00+11:00'
Таким образом, status
для дня 1 будет агрегировано между2019-02-28T00:00:00+11:00
и 2019-03-01T00:00:00+11:00
Предполагая, что я могу передать offset
в запрос в качестве параметра, и что эффективность не является существенным фактором (я ищубыстрое решение в автономном запросе), как я могу выполнить группировку и вернуть номер дня?
BigQuery, похоже, не имеет функции convert
, поэтому я небыть в состоянии использовать что-то подобное в моем group by
:
group by convert(sample_date_time, dateadd(hours, offset, sample_date_time))
Любой совет о том, что я должен смотреть, чтобы достичь этого, приветствуется.