Я пытаюсь подсчитать отдельных пользователей, которые также соответствуют условию (в этом примере deleted IS NOT TRUE
). Мне нужно сгруппировать по ежемесячным когортам пользователей, которые были активны в течение целевого месяца, и пользователей, которые были активны в предыдущие месяцы.
Чтобы получить предыдущие месяцы, я использую отрицательное равенство (FORMAT_DATE('%Y%m', DATE(timestamp)) != CONCAT(year, month)
), но когда я это делаю, я получаю сообщение «Ошибка: LEFT OUTER JOIN нельзя использовать без условия, которое является равенством полей с обеих сторон соединения». Использование равенства без отрицания выполняется успешно.
Я просмотрел это и это но оба эти вопроса в контексте использования явного JOIN
.
Приведенный ниже код воспроизводит проблему и может быть выполнен в веб-консоли BigQuery.
CREATE TEMPORARY FUNCTION getCurrentCount(year STRING, month STRING) AS ((
SELECT
COUNT(DISTINCT t.by) distinct_count
FROM
`bigquery-public-data.hacker_news.full` AS t
WHERE
FORMAT_DATE('%Y%m', DATE(timestamp)) = CONCAT(year, month) AND
deleted IS NOT TRUE
));
CREATE TEMPORARY FUNCTION getPreviousCount(year STRING, month STRING) AS ((
SELECT
COUNT(DISTINCT t.by) distinct_count
FROM
`bigquery-public-data.hacker_news.full` AS t
WHERE
FORMAT_DATE('%Y%m', DATE(timestamp)) != CONCAT(year, month) AND
deleted IS NOT TRUE
));
WITH easy_cohorts AS (
SELECT
t.by author,
FORMAT_DATE('%Y', DATE(timestamp)) year,
FORMAT_DATE('%m', DATE(timestamp)) month
FROM
`bigquery-public-data.hacker_news.full` AS t
)
SELECT
year,
month,
COUNT(author) total_authors,
getCurrentCount(year, month) distinct_current_authors,
getPreviousCount(year, month) distinct_previous_authors
FROM
easy_cohorts
GROUP BY
year,
month
ORDER BY
year,
month
Почему я получаю эту ошибку и как ее обойти?
1
из года, а затем использовать равенство? Возможно, вам придется выполнить приведение между int64 и строкой. - person Elliott Brossard   schedule 14.06.2018