以下是 BigQuery 标准 SQL,避免使用 JOIN,而是使用分析函数
#standardSQL
SELECT
Deal_ID, Category,
EXTRACT(MONTH FROM month) AS month,
EXTRACT(YEAR FROM month) AS year
FROM (
SELECT
Deal_ID, Category, month,
LEAD(month) OVER(PARTITION BY Deal_ID, Category ORDER BY month) AS next_month
FROM (
SELECT
Deal_ID, Category,
DATE_TRUNC(DATE, MONTH) month
FROM `big-query-1233.BI_Automation.live_deals_history_since_15_sep`
GROUP BY Deal_ID, Category, month
)
)
WHERE DATE_DIFF(next_month, month, MONTH) > 1
-- ORDER BY month, Deal_ID, Category
您可以使用下面的虚拟数据测试/玩它
#standardSQL
WITH `big-query-1233.BI_Automation.live_deals_history_since_15_sep` AS (
SELECT 1 AS Deal_ID, 1 AS Category, DATE '2017-01-01' AS DATE UNION ALL
SELECT 1, 1, DATE '2017-01-02' UNION ALL
SELECT 1, 1, DATE '2017-02-02' UNION ALL
SELECT 1, 1, DATE '2017-02-15' UNION ALL
SELECT 1, 1, DATE '2017-03-15' UNION ALL
SELECT 1, 1, DATE '2017-04-15' UNION ALL
SELECT 1, 1, DATE '2017-06-15' UNION ALL
SELECT 1, 1, DATE '2017-07-07' UNION ALL
SELECT 1, 1, DATE '2017-08-22' UNION ALL
SELECT 1, 1, DATE '2017-12-12'
)
SELECT
Deal_ID, Category,
EXTRACT(MONTH FROM month) AS month,
EXTRACT(YEAR FROM month) AS year
FROM (
SELECT
Deal_ID, Category, month,
LEAD(month) OVER(PARTITION BY Deal_ID, Category ORDER BY month) AS next_month
FROM (
SELECT
Deal_ID, Category,
DATE_TRUNC(DATE, MONTH) month
FROM `big-query-1233.BI_Automation.live_deals_history_since_15_sep`
GROUP BY Deal_ID, Category, month
)
)
WHERE DATE_DIFF(next_month, month, MONTH) > 1
ORDER BY month, Deal_ID, Category
注意:不清楚您需要 COUNT 个客户还是只需要客户列表
以上为您提供列表
但是如果你需要 COUNTs - 你只需添加额外的 GROUP BY 和 COUNT,因为它在下面
#standardSQL
SELECT
Category,
EXTRACT(MONTH FROM month) AS month,
EXTRACT(YEAR FROM month) AS year,
COUNT(Deal_ID) AS customers
FROM (
SELECT
Deal_ID, Category, month,
LEAD(month) OVER(PARTITION BY Deal_ID, Category ORDER BY month) AS next_month
FROM (
SELECT
Deal_ID, Category,
DATE_TRUNC(DATE, MONTH) month
FROM `big-query-1233.BI_Automation.live_deals_history_since_15_sep`
GROUP BY Deal_ID, Category, month
)
)
WHERE DATE_DIFF(next_month, month, MONTH) > 1
GROUP BY month, year, Category
ORDER BY month, year, Category