BigQuery - 仅选择BigQuery中的第一行

时间:2018-06-19 08:01:44

标签: google-bigquery

我有一个数据表,在A列中,我有一组重复数据(一个接一个)。

我想仅根据A列中的值选择每个组的第一行(没有其他条件)。请注意,我希望为所提到的新找到的行选择所有相应的列(我不想排除它们)。

有人可以帮我解决问题。

以下是一个示例: SAMPLE

谢谢!

5 个答案:

答案 0 :(得分:5)

#standardSQL
SELECT row.*
FROM (
  SELECT ARRAY_AGG(t LIMIT 1)[OFFSET(0)] row
  FROM `project.dataset.table` t
  GROUP BY columnA
) 

答案 1 :(得分:2)

您可以这样尝试:

#standardSQL
SELECT
   * EXCEPT(rn)
FROM (
   SELECT
   *,
   ROW_NUMBER() OVER(PARTITION BY columnA ORDER BY columnA) AS rn
FROM
   your_dataset.your_table)
WHERE rn = 1

将返回:

Row   columnA       col2       ...   
1     AC1001        Z_Creation   
2     ACO112BISPIC  QN
...

答案 2 :(得分:1)

在查询末尾添加LIMIT 1

类似

SELECT name, year FROM person_table ORDER BY year LIMIT 1

答案 3 :(得分:0)

在BigQuery中,行的物理顺序并不重要。 “ BigQuery不保证表中行的稳定顺序。只有带有显式ORDER BY子句的查询结果才具有明确定义的顺序。” [1]

首先,您需要定义哪个属性将确定组的第一行,然后可以通过更改该属性的ORDER BY来运行Vasily Bronsky的查询。这意味着您应该在表格中添加另一列以存储行的顺序,或者从您拥有的列中选择一个。

答案 4 :(得分:0)

您现在可以使用 qualify 来获得更简洁的解决方案:

select
   *
from
   your_dataset.your_table
where true
qualify ROW_NUMBER() OVER(PARTITION BY columnA ORDER BY columnA) = 1