BigQuery-在BigQuery中仅选择第一行

zer*_*ina 2 google-bigquery

我有一个包含数据的表,其中AI列中有重复数据的组(一个接一个)。

我只希望仅基于A列中的值选择每个组的第一行(没有其他条件)。提醒您,我还希望为提到的新找到的行选择所有相应的列(我不想排除它们)。

有人可以帮助我进行适当的查询。

这是一个示例: SAMPLE

谢谢!

Vas*_*sky 8

你可以这样尝试:

#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
Run Code Online (Sandbox Code Playgroud)

这将返回:

Row   columnA       col2       ...   
1     AC1001        Z_Creation   
2     ACO112BISPIC  QN
...
Run Code Online (Sandbox Code Playgroud)


Mah*_*ade 7

添加LIMIT 1在查询末尾

就像是

SELECT name, year FROM person_table ORDER BY year LIMIT 1
Run Code Online (Sandbox Code Playgroud)


Mik*_*ant 6

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

  • 谢谢@米哈伊尔。与使用等效的“row_number()”解决方案相比,您对性能有什么了解吗? (2认同)

Dav*_*sip 5

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

select
   *
from
   your_dataset.your_table
where true
qualify ROW_NUMBER() OVER(PARTITION BY columnA ORDER BY columnA) = 1
Run Code Online (Sandbox Code Playgroud)