这是我的疑问:
WITH last_transaction AS (
SELECT
month
FROM db.transactions
ORDER BY date DESC
LIMIT 1
)
SELECT
*
FROM db.transactions
-- WHERE month = last_transaction.month
WHERE month = 11
GROUP BY
id
注释掉的行不起作用,但意图很明确,我假设:我需要选择最近一个月的交易。业务逻辑可能没有意义,因为我已从更大的查询中提取它。主要问题是:如何使用从另一个查询派生的单个值。
答案 0 :(得分:1)
尝试加入last_transaction。
有点像这样;
SELECT *
FROM db.transactions
JOIN last_transaction
ON db.transactions.id = last_transaction.id
WHERE month = last_transaction.month
GROUP BY id
答案 1 :(得分:1)
您只有一行,因此您可以使用标量子查询:
SELECT t.*
FROM db.transactions t
WHERE month = (SELECT last_transaction.month FROM last_transaction);
我删除了GROUP BY id
,因为它在BigQuery中会出现语法错误,从逻辑上讲它没有意义。为什么在表中会复制一个名为id
的列?
但是,此查询通常写为:
SELECT t.*
FROM (SELECT t.*, MAX(month) OVER () as max_month
FROM db.transactions t
WHERE month = max_month;