Привет, Михаил Берлянт, Это прекрасно отвечает на мой вопрос. Ваше первое предложение работает отлично. Мне не нужно заполнять даты без данных. Даты в пределах диапазона и дни между заказами - это то, что мы ищем. Огромное спасибо.

ький тут. Я пытаюсь получить ежедневных и еженедельных активных пользователей с течением времени. у них есть 30 дней, прежде чем они будут считаться неактивными. Моя цель - создать график, который можно разделить по user_id для отображения когорт, регионов, категорий и т. Д.

Я создал таблицу дат, чтобы получать каждый день для периода времени, и у меня есть упрощенная таблица заказов с базовой информацией, которая мне нужна для расчета.

Я пытаюсь сделать левое соединение, чтобы получить статус по дате, используя следующий SQL-запрос:

WITH daily_use AS (
        SELECT
          __key__.id AS user_id
          , DATE_TRUNC(date(placeOrderDate), day) AS activity_date
        FROM `analysis.Order`
        where isBuyingGroupOrder = TRUE 
          AND testOrder = FALSE
        GROUP BY 1, 2
 ),
dates AS (
        SELECT DATE_ADD(DATE "2016-01-01", INTERVAL d.d DAY) AS date
        FROM
          (
           SELECT ROW_NUMBER() OVER(ORDER BY __key__.id) -1 AS d
           FROM `analysis.Order`
           ORDER BY __key__.id
           LIMIT 1096
          ) AS  d
        ORDER BY 1 DESC
      )

SELECT
      daily_use.user_id
    , wd.date AS date
    , MIN(DATE_DIFF(wd.date, daily_use.activity_date, DAY)) AS days_since_last_action
FROM dates AS wd

LEFT JOIN daily_use
    ON wd.date >= daily_use.activity_date
    AND wd.date < DATE_ADD(daily_use.activity_date, INTERVAL 30 DAY)

GROUP BY 1,2

Я получаю эту ошибку: LEFT OUTER JOIN не может использоваться без условия, которое является равенством полей с обеих сторон соединения. В BigQuery и было интересно, как можно обойти это. Я использую Стандартный SQL в BigQuery.

Спасибо

Ответы на вопрос(1)

Ваш ответ на вопрос