Google cloud platform 在语句导致联接错误的情况下,在临时函数中对等式求反
我试图统计也符合条件的不同用户(在本例中,Google cloud platform 在语句导致联接错误的情况下,在临时函数中对等式求反,google-cloud-platform,google-bigquery,bigquery-standard-sql,Google Cloud Platform,Google Bigquery,Bigquery Standard Sql,我试图统计也符合条件的不同用户(在本例中,deleted不为TRUE)。我需要每月对目标月内活跃的用户和前几个月活跃的用户进行分组 为了检索前几个月,我使用了一个否定的等式(格式_DATE(“%Y%m',DATE(timestamp))!=CONCAT(year,month)),但当我这样做时,我收到了“Error:LEFT OUTER JOIN不能在没有条件的情况下使用,条件是JOIN两边的字段相等”。使用不带否定的等式将成功运行 我已经看过了,但这两个问题都是在使用显式的连接的上下文中提出的
deleted不为TRUE
)。我需要每月对目标月内活跃的用户和前几个月活跃的用户进行分组
为了检索前几个月,我使用了一个否定的等式(格式_DATE(“%Y%m',DATE(timestamp))!=CONCAT(year,month)
),但当我这样做时,我收到了“Error:LEFT OUTER JOIN不能在没有条件的情况下使用,条件是JOIN两边的字段相等”。使用不带否定的等式将成功运行
我已经看过了,但这两个问题都是在使用显式的连接的上下文中提出的
下面的代码复制了该问题,可以在BigQuery web控制台中执行
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
为什么会出现此错误?如何避免此错误?下面是针对BigQuery标准SQL的
#standardSQL
CREATE TEMPORARY FUNCTION getCurrentCount(month DATE) AS ((
SELECT COUNT(DISTINCT t.by) distinct_count
FROM `bigquery-public-data.hacker_news.full` AS t
WHERE DATE_TRUNC(DATE(TIMESTAMP), MONTH) = month
AND deleted IS NOT TRUE
));
CREATE TEMPORARY FUNCTION getPreviousCount(month DATE) AS ((
SELECT COUNT(DISTINCT t.by) distinct_count
FROM `bigquery-public-data.hacker_news.full` AS t
WHERE DATE_TRUNC(DATE(TIMESTAMP), MONTH) = DATE_SUB(month,INTERVAL 1 MONTH)
AND deleted IS NOT TRUE
));
WITH easy_cohorts AS (
SELECT t.by author,
DATE_TRUNC(DATE(TIMESTAMP), MONTH) month
FROM `bigquery-public-data.hacker_news.full` AS t
)
SELECT month,
COUNT(author) total_authors,
getCurrentCount(month) distinct_current_authors,
getPreviousCount(month) distinct_previous_authors
FROM easy_cohorts
GROUP BY month
ORDER BY month
请注意:我假设您的队列逻辑是正确的,并且符合您的要求。因此,我只修复了“检索”当前月份和上个月的不同计数如果从年份中减去1
,然后使用相等值会怎么样?您可能需要在int64和string之间进行转换。我在问题中可能没有明确说明,但我希望计算当前月份的计数,然后计算到目前为止的所有前几个月的计数;不仅仅是最近的前一个月。你建议怎么做?不,我问的是如何“找回前几个月”。我可以看出快速阅读这篇文章可能会让人困惑,但我没有要求“检索上个月”,这是这个答案的基础。因此,我相信我的问题目前仍然有效。我会在有时间的时候重新考虑我的答案。