我有以下SQL尝试获取结果表中每一行的最新版本,即具有唯一确认号,最大seq和最大批处理的单行,这使用仅附加复制{{3 }}。但是,它不返回任何结果都是错误的,内部联接可以按预期运行,但不能正常运行。预期结果
confirmation_number | date | seq | batch
23742902 | date | max(seq)| max(batch)
SELECT DISTINCT r.*
FROM `results_table` r
INNER JOIN (
SELECT confirmation_number,
date,
MAX(_sdc_sequence) AS seq,
MAX(_sdc_batched_at) AS batch
FROM `results_table`
GROUP BY confirmation_number, date) rr
ON r.confirmation_number = rr.confirmation_number
AND r.date = rr.date
AND r._sdc_sequence = rr.seq
AND r._sdc_batched_at = rr.batch
这是我要查询的表,我的sql没有返回结果集。它应该返回一个单行,其中包含一个不同的confirmation_number,max seq和max batch
答案 0 :(得分:1)
以下是用于BigQuery标准SQL
我在这里很想知道您的预期结果-但我认为下面应该给您预期的结果
#standardSQL
SELECT AS VALUE ARRAY_AGG(r ORDER BY seq DESC LIMIT 1)[OFFSET(0)]
FROM `project.dataset.results_table` r
GROUP BY confirmation_number
正如您在此处看到的-每个确认号返回一行-该确认号具有最大seq值的行以及所有各自的值(日期,批次等)
不确定您是否也需要按date
分组(就像您查询中的查询一样-但在我看来,这不是必需的)-但是,如果您确实需要-很容易添加< / p>
答案 1 :(得分:1)
您只能使用一个最大seq或批处理,如果同时使用它们,则您将获得结果,但由于两个最大值都可能从不同行返回而无法获取记录,因此...可能使用...
SELECT DISTINCT r.*
FROM `results_table` r
INNER JOIN (
SELECT confirmation_number,
date,
MAX(_sdc_sequence) AS seq,
MAX(_sdc_batched_at) AS batch
FROM `results_table`
GROUP BY confirmation_number, date) rr
ON r.confirmation_number = rr.confirmation_number
AND r.date = rr.date
AND r._sdc_sequence = rr.seq
----AND r._sdc_batched_at = rr.batch
OR
SELECT DISTINCT r.*
FROM `results_table` r
INNER JOIN (
SELECT confirmation_number,
date,
MAX(_sdc_sequence) AS seq,
MAX(_sdc_batched_at) AS batch
FROM `results_table`
GROUP BY confirmation_number, date) rr
ON r.confirmation_number = rr.confirmation_number
AND r.date = rr.date
----AND r._sdc_sequence = rr.seq
AND r._sdc_batched_at = rr.batch
答案 2 :(得分:0)
如果要保留原始表中的每一行(在联接的左侧),则应从联接条件中删除对最大值的限制:
SELECT r.*, rr.seq, rr.batch
FROM results_table r
INNER JOIN
(
SELECT confirmation_number, date, MAX(_sdc_sequence) AS seq,
MAX(_sdc_batched_at) AS batch
FROM results_table
GROUP BY confirmation_number, date
) rr
ON r.confirmation_number = rr.confirmation_number AND
r.date = rr.date;
查询的逻辑只是为每个确认号/日期组引入最大_sdc_sequence
和_sdc_batched_at
值,以及表中已经存在的列。