根据json值

时间:2018-02-05 15:48:48

标签: sql json postgresql duplicates

我有一个包含两列的表:idcontent

内容是一个json字段。

我需要删除jsons中属性的重复项。

以下是我所拥有的jsons的例子:

{
    "num_aire_ospf": "",
    "name": "name1",
    "rpv": "119"    
}

以下是我需要删除的重复项目的例子:

ID    | Content  
--------------------------------------------------------------------------
 1    | {"num_aire_ospf": "", "name": "name1", "rpv": "119" }
 2    | {"num_aire_ospf": "", "name": "name1", "rpv": "119" }
 3    | {"num_aire_ospf": "", "name": "name1", "rpv": "119" }
 4    | {"num_aire_ospf": "", "name": "name1", "rpv": "120" }
 5    | {"num_aire_ospf": "", "name": "name8", "rpv": "150" }
 6    | {"num_aire_ospf": "", "name": "name8", "rpv": "150" }
 7    | {"num_aire_ospf": "", "name": "name8", "rpv": "151" }

我想删除名称相同的第一行。

在这个例子中,我想查询删除行1,2,3,5,6并且只保留这些行:

ID    | Content  
--------------------------------------------------------------------------    
 4    | {"num_aire_ospf": "", "name": "name1", "rpv": "120" }    
 7    | {"num_aire_ospf": "", "name": "name8", "rpv": "151" }

所以只保留最后一行具有相同的名称。

因此,对于名称1'我需要使用' name1'删除前3行。作为名字。 对于&name; name8'我需要删除前两行,其名称为' 8作为名称。

它必须是动态的,因为我有很多具有相同名称的行,我想保留最后一行。

1 个答案:

答案 0 :(得分:1)

没有"最后一行" (或"第一行")在关系数据库的表中。从你的例子中我猜到"最后一行",你的意思是那个id最高的那个,那么你可以使用它:

delete from data
where id not in (select max(id)
                 from data 
                 group by content ->> 'name')