我有一个包含两列的表:id
和content
。
内容是一个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作为名称。
它必须是动态的,因为我有很多具有相同名称的行,我想保留最后一行。
答案 0 :(得分:1)
没有"最后一行" (或"第一行")在关系数据库的表中。从你的例子中我猜到"最后一行",你的意思是那个id
最高的那个,那么你可以使用它:
delete from data
where id not in (select max(id)
from data
group by content ->> 'name')