Идентифицировать дубликаты записей и идентифицировать уникальные записи на основе логических операторов серии - PullRequest
0 голосов
/ 30 августа 2018

У меня есть список городов мира и различные столбцы данных. Первоначальный финал был получен из Natural Earth, а затем были добавлены дополнительные поля, включая столбец ID. Для разных записей один и тот же идентификатор был назначен нескольким записям. Это не было ошибкой, основываясь на том, что я сделал, чтобы присоединиться к ID, именно это и должно было произойти.

Теперь я хочу выбрать одну запись для каждого идентификатора. Делая это вручную, я начал с колонки «worldcity». Если город был городом мира (worldcity = 1), я вел эту запись. Если в этом столбце для нескольких городов задано значение 1 или для всех записей установлено значение 0, я перешел к столбцу «Мегаполис».

Если только один город был помечен как мегаполис ("Мегаполис = 1), то я сохранял этот столбец. Если более одного города имели значение одной или все записи с этим идентификатором имели значение 0 для мегаполиса, я перемещал к значению scalerank.

Если в одном из городов значение "scalerank" было ниже, чем во всех других городах, я вел эту запись. Если не было уникального минимума для этого значения, я перешел к столбцу «labelrank». Если одна из записей имела более низкое значение «labelrank», чем все другие записи с таким же идентификатором, я решил сохранить эту запись и удалить все остальные. Если они также имеют одинаковый масштаб, я помечаю эти записи для последующего просмотра.

Мой вопрос: есть ли способ сделать это автоматически, используя серию логических утверждений? Могу ли я запустить эту таблицу через какой-то код, чтобы ускорить процесс.

Мне, возможно, потребуется отсортировать тысячи записей. Большинство значений не являются дубликатами, но важно идентифицировать те, которые являются дубликатами.

1 Ответ

0 голосов
/ 31 августа 2018

Если вы делаете это в базе данных, которая поддерживает выражения таблицы связи (CTE), то это this. Я вижу, вы упомянули электронную таблицу, хотя мы говорим не о базе данных?

;with cte as (
    select *, row_number() over (partition by ID order by worldcity desc, megacity desc,scalerank,labelrank) as ranking 
    from cities
)
select ...blah...
from cte
where ranking=1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...