我有一份世界城市列表和各种数据列。原始的最终结果是从Natural Earth获得的,然后添加了其他字段,包括ID列。对于各种记录,将相同的ID分配给多个记录。根据我加入ID所做的事情,这不是错误,这正是应该发生的情况。
现在,我想为每个ID选择一个记录。手动执行此操作时,我从“ worldcity”列开始。如果一个城市是世界城市(worldcity = 1),我会保留该记录。如果该列的多个城市的值为1,或者所有记录的值均为0,则我转到“ Megacity”列。
如果只有一个城市被标记为大城市(“ Megacity = 1”),那么我保留该列。如果一个以上城市的价值为一个或所有具有该ID的记录的大城市值为0,我移动了到scalerank值。
如果其中一个城市的“ scalerank”价值低于所有其他城市,我会保留该记录。如果该值没有唯一的最小值,那么我转到“ labelrank”列。如果其中一个记录的“ labelrank”值低于具有相同ID的所有其他记录,则我选择保留该记录并删除所有其他记录。如果它们的标度等级也相同,我标记这些记录以供以后查看。
我的问题是:有没有办法使用一系列逻辑语句自动执行此操作?我可以通过某种代码来运行此电子表格以加快该过程。
我可能需要对数千条记录进行排序。大多数值不是重复值,但是识别重复值很重要。
答案 0 :(得分:0)
如果要在支持commom表表达式(CTE)的数据库中执行此操作,则此为。我确实看到您提到了电子表格,所以我们说的是非数据库吗?
;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