我有一个数据表,在A列中,我有一组重复数据(一个接一个)。
我想仅根据A列中的值选择每个组的第一行(没有其他条件)。请注意,我希望为所提到的新找到的行选择所有相应的列(我不想排除它们)。
有人可以帮我解决问题。
以下是一个示例: SAMPLE
谢谢!
答案 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