SQL(BigQuery):如何使用另一个查询派生的单个值?

时间:2017-12-04 14:13:03

标签: sql google-bigquery

这是我的疑问:

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

注释掉的行不起作用,但意图很明确,我假设:我需要选择最近一个月的交易。业务逻辑可能没有意义,因为我已从更大的查询中提取它。主要问题是:如何使用从另一个查询派生的单个值。

2 个答案:

答案 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;