Как выбрать первую запись из дубликатов, только с повторяющимися значениями столбца - PullRequest
0 голосов
/ 03 августа 2020

Вот ситуация, когда у меня есть таблица в bigquery, как показано ниже.

Как и в таблице, у нас есть записи 1 и 3 с одним и тем же идентификатором, но с другим именем first_name (скажем, человек с идентификатором изменил свое имя first_name), все остальные поля одинаковы в обеих записях (1 и 3) Теперь мне нужно выбрать одну запись из этих двух, как я могу это сделать. Я пробовал самостоятельно присоединиться, но это отбрасывает обе записи, group_by не будет работать, потому что записи не дублируются, только Id дублируется с отдельным.

Спасибо !!!!

Сейчас я использую запрос

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

Ответы [ 2 ]

1 голос
/ 04 августа 2020

Вы можете использовать функцию ROW_NUMBER для присвоения номеров строк каждой из ваших записей в таблице.

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

ROW_NUMBER не требует предложения ORDER BY. Возвращает последовательный порядковый номер строки (начиная с 1) каждой строки для каждого упорядоченного раздела. Если предложение ORDER BY не указано, результатом будет недетерминированный c. Если у вас есть дата создания записи или даты изменения, вы можете использовать их в предложении ORDER BY, чтобы всегда получать самые свежие записи.

0 голосов
/ 03 августа 2020

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...