【问题标题】:Pgsql find similar records in databasepgsql 在数据库中查找相似的记录
【发布时间】:2021-04-01 14:25:15
【问题描述】:

我有一张这样布局的表格

sensor_id time value
1 2020-12-22 09:00:00 20.5
1 2020-12-22 10:00:00 21.5
1 2020-12-22 11:00:00 22.5
1 2020-12-22 12:00:00 23.5
2 2020-12-22 09:00:00 30.5
2 2020-12-24 10:00:00 31.5
2 2020-12-24 11:00:00 32.5
2 2020-12-24 12:00:00 33.5

我希望能够找到所有 sensor_id 1 和 2 具有相同日期的引用。

计划是让用户选择一个包含传感器列表的站点,将数据从站点 a 移动到站点 b。如果此时站点 b 上已经存在站点 a 上的任何数据,那么我不需要移动它。 我计划通过运行一个简单的update readings set sensor_id = #a where sensor_id = #b 来“移动”数据。

请注意,我有数十亿条记录的实际数据,我会将数据从一个 sensor_id “移动”到另一个,并且通常会同时移动大约 10 个传感器的列表。

我真的不知道从哪里开始。 谁能指出我正确的方向?

【问题讨论】:

    标签: sql postgresql count sql-update subquery


    【解决方案1】:

    查找 sensor_id 1 和 2 具有相同日期的所有引用

    为此,您可以使用聚合:

    select time
    from readings
    when sensor_id in (1, 2)
    group by time
    having count(*) = 2
    

    这将为您提供两个传感器都有数据的所有times。

    从问题的其余部分来看,我认为您希望在不会与现有记录冲突的情况下更改记录上的传感器 ID(例如,从 12)。这表明:

    update readings r
    set sensor_id = 2
    where sensor_id = 1 and not exists (
        select 1 from readings r1 where r1.sensor_id = 2 and r1.time = r.time
    )
    

    【讨论】:

      猜你喜欢
      • 2019-06-07
      • 2011-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-05
      • 1970-01-01
      相关资源
      最近更新 更多