Как сделать запрос на несколько дат в определенном диапазоне в Google Big Query - PullRequest
0 голосов
/ 21 июня 2019

Я делаю довольно длинный запрос, чтобы найти клиента с определенным условием в определенные даты, в данном случае '2019-6-20', запрос такой:

Вот мой код

select current_date() as date , count(customer_id) as cell13
from(
select customer_id, count(id) as total, string_agg(payment_state order by created_at desc limit 1) as cek
from(
select distinct(A.id), A.customer_id, extract(month from A.created_at) as months,extract(day from A.created_at) as days, extract(year from A.created_at) as years, payment_state, A.created_at, A.grandtotal_cents
from bl.orders as A
left join bl.blacklists as B
on A.customer_id = B.customer_id
where date(A.created_at) >= date_sub(date('2019-6-20') , interval 60 day) and grandtotal_cents > 0 and B.customer_id is null
)
group by customer_id
having cek = "unpaid")

Вот результат

Row  date          cell13
1    2019-06-21    696

Теперь мне нужно запросить это для нескольких дат в определенном диапазоне дат, например от 2019-03-23 до 2019-06-21.Как предположить, что я делаю это, поэтому вывод будет выглядеть как

Row  date          cell13
1    2019-06-21    696
...
90   2019-03-23    ...

1 Ответ

1 голос
/ 21 июня 2019

Вы можете сгенерировать таблицу дат, используя generate_date_array() и unnest(), а затем использовать ее с left join.

В целом, однако, ваш запрос - это сообщение, за которым трудно следовать, но здесьэто идея:

with dates as (
      select dte
      from (select generate_date_array('2019-03-23', '2016-06-21', interval 1 day) d
           ) d cross join
           unnest(d.d) dte
     )
select . . .
from dates left join
     bl.orders o
     on date(o.created_at) >= date_sub(dte, interval 60 day)
     . . .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...