当前位置: 首页 > 知识库问答 >
问题:

删除数据在json列中的postgresql数据库中的连续重复项

董俊晖
2023-03-14

因此,我有一个名为state_data的postgresql表,其中有两列:datetimestatestate列是jsonb类型的,指定给定日期时间的各种状态数据。下面是该表的一个示例:

datetime            | state
================================================
2018-10-31 08:00:00 | {"temp":75.0,"location":1}
2018-10-31 08:01:00 | {"temp":75.0,"location":1}
2018-10-31 08:02:00 | {"temp":75.0,"location":1}
2018-10-31 08:03:00 | {"temp":75.0,"location":2}
2018-10-31 08:04:00 | {"temp":74.8,"location":1}
2018-10-31 08:05:00 | {"temp":74.8,"location":2}
2018-10-31 08:06:00 | {"temp":74.7,"location":1}
datetime            | state
================================================
2018-10-31 08:00:00 | {"temp":75.0,"location":1}
2018-10-31 08:04:00 | {"temp":74.8,"location":1}
2018-10-31 08:06:00 | {"temp":74.7,"location":1}

如果我想删除两个json项的重复项,该怎么办?例如,

datetime            | state
================================================
2018-10-31 08:00:00 | {"temp":75.0,"location":1}
2018-10-31 08:03:00 | {"temp":75.0,"location":2}
2018-10-31 08:04:00 | {"temp":74.8,"location":1}
2018-10-31 08:05:00 | {"temp":74.8,"location":2}
2018-10-31 08:06:00 | {"temp":74.7,"location":1}

共有1个答案

万德海
2023-03-14

使用窗口函数lag():

select datetime, state
from (
    select datetime, state, lag(state) over (order by datetime) as prev
    from state_data
    ) s
where state->>'temp' is distinct from prev->>'temp'

如果表有主键,则应在delete命令中使用它。在缺少主键的情况下,可以将state强制转换为JSONB:

delete from state_data
where (datetime, state::jsonb) not in (
    select datetime, state::jsonb
    from (
        select datetime, state, lag(state) over (order by datetime) as prev
        from state_data
        ) s
    where state->>'temp' is distinct from prev->>'temp'
)
 类似资料:
  • 问题内容: 有没有一种有效的方法使用python从此数据中删除重复的“ person_id”字段?在这种情况下,只需保持第一次出现。 应成为: 问题答案: 假设您的JSON是有效语法,并且您确实在请求帮助,因为您将需要执行以下操作 如果要始终保留第一次出现,则需要执行以下操作

  • 问题内容: 我需要从数据库中删除重复的行。我可以用简单的SQL查询吗?如果没有,请告诉我一些快速算法。 例子: 我需要删除ID为2的行(或3,无论如何,它们是相等的,但不能同时都是)。谢谢你的帮助 问题答案: 正如评论中指出的那样,如果连续出现三遍,则此操作将无效。您可以重复运行此(繁重的)查询,直到停止删除内容为止,或者等待更好的答案…

  • PostgreSQL 删除数据库可以用以下三种方式: 1、使用 DROP DATABASE SQL 语句来删除。 2、使用 dropdb 命令来删除。 3、使用 pgAdmin 工具。 注意:删除数据库要谨慎操作,一旦删除,所有信息都会消失。 DROP DATABASE 删除数据库 DROP DATABASE 会删除数据库的系统目录项并且删除包含数据的文件目录。 DROP DATABASE 只能由

  • 问题内容: 我想删除彼此跟随的重复项,但不要删除整个数组中的重复项。另外,我想保持顺序不变。 所以如果输入是输出 我找到了一种使用方法,但我正在寻找更快的NumPy解决方案。 问题答案: 一般的想法是用来查找数组中两个连续元素之间的差异。然后我们只索引那些给出差异元素的索引。但由于长度 是1那么短的索引之前,我们需要对涉及diff阵列的开始。 说明:

  • 问题内容: 我有一个像这样的json数据: 从中,我必须使用删除一个重复的条目,与情况相同, 结果如下: 怎么可能 问题答案:

  • 可能重复: PostgreSQL是否支持“重音不敏感”排序规则? 我试图删除重音,所以当我选择时,它会忽略它们。 例子: 它返回: 或者类似的东西。 我发现这些函数无法工作,我想这可能是因为我使用的是Struts 1。十、 请检查它们,告诉我哪里错了,或者我应该使用什么其他功能。 第一个函数 第二个功能 在NetBeans中运行文件时,这两个函数都会生成以下错误: