sql—如何从重复的记录中选择第一条记录,其中只有重复的列值

ev7lccsx  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(665)

下面是在bigquery中有一个表的情况,如下所示。

在表中,我们有记录1和3,它们具有相同的id,但名字不同(比如id为1的人更改了他的名字),所有其他字段在这两个记录(1和3)中都是相同的,现在我需要从这两个记录中选择一个记录如何才能做到这一点。我尝试了self-join,但这是丢弃两个记录,group\u by将不起作用,因为记录不重复,只有id与distinct相同。
谢谢!!!!
我现在使用的查询是

select * from table t group by 1,2,3,4,5;
z4iuyo4d

z4iuyo4d1#

您可以使用row\ u number函数为表中的每条记录指定行号。

select *
from(    
select *, ROW_NUMBER() OVER(PARTITION BY t.id) rn
    from t)
Where rn = 1

行号不需要order by子句。返回每个有序分区的每一行的顺序行序号(基于1)。如果orderby子句未指定,则结果是不确定的。如果您有记录创建日期或修改日期,则可以使用ORDERBY子句中的日期来获取最新的记录。

7hiiyaii

7hiiyaii2#

sql表表示无序集。除非有指定排序的列,否则没有第一行。我假设你有这样一个专栏。
如果需要特定的行,可以将聚合与 order by :

select array_agg(t order by ? asc limit 1)[ordinal(1)].*
from t
group by id;
``` `?` 指定排序的列。
你也可以省去 `order by` :

select array_agg(t limit 1)[ordinal(1)].*
from t
group by id;

相关问题