我有一个包含数据的表格,其中在A列中有一组重复的数据(连续出现)。
我想根据仅列A中的值选择每组的第一行(没有其他条件)。请注意,对于所找到的新行,我还想选择所有相应的列(我不想将它们排除在外)。
有人能帮我写一个正确的查询吗?
这是一个样例:SAMPLE
谢谢!
我有一个包含数据的表格,其中在A列中有一组重复的数据(连续出现)。
我想根据仅列A中的值选择每组的第一行(没有其他条件)。请注意,对于所找到的新行,我还想选择所有相应的列(我不想将它们排除在外)。
有人能帮我写一个正确的查询吗?
这是一个样例:SAMPLE
谢谢!
#standardSQL
SELECT row.*
FROM (
SELECT ARRAY_AGG(t LIMIT 1)[OFFSET(0)] row
FROM `project.dataset.table` t
GROUP BY columnA
)
row_number()
解决方案相比,性能如何? - Jordan Arsenault你可以尝试这样做:
#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
...
LIMIT 1
,类似以下示例:SELECT name, year FROM person_table ORDER BY year LIMIT 1
您现在可以使用qualify
来实现更简洁的解决方案:
select
*
from
your_dataset.your_table
where true
qualify ROW_NUMBER() OVER(PARTITION BY columnA ORDER BY columnA) = 1