SQL Update在导入数据期间

时间:2017-01-12 06:02:27

标签: sql postgresql upsert

我有以下格式的样本数据,ID和名称。名称是唯一值。在这里我们可以导入数据。但是在导入期间可能在sql查询中是否已经存在给定,然后使用带有增量值的旧后缀更新名称以及后缀。

  1. 在下面的数据中,Jack已经在那里,然后在导入期间我需要将其更新为Jack_old1并将新的导入为具有不同ID的Jack。

  2. 在下面的数据中,因为Sino已经存在,那么在导入过程中我需要将其更新为Sino_Old2并以不同的ID导入新的Sino。

  3. ID   Name
    --   ------
    1    Jack
    2    Smith
    3    Sino_Old1
    4    Sino
    

    上述逻辑是否可以通过带有更新查询的sql查询来实现,因为通过java处理时间更多。

1 个答案:

答案 0 :(得分:0)

我认为你可以解决在重复的情况下尝试更改名称的丑陋。修改您的表以获得时间戳列:

ID | Name  | insert_time
1  | Jack  | '2017-01-12 14:00:00'
2  | Smith | '2017-01-12 14:00:00'
3  | Sino  | '2017-01-12 14:00:00'
4  | Jack  | '2017-01-12 14:23:15'

现在,如果插入了另一条select * from yourTable where Name = 'Jack' AND Timestamp = (select max(Timestamp) from yourTable where Name = 'Jack') 记录,只需插入新数据而不更改名称:

{{1}}

如果您想要最新的Jack记录,可以使用以下查询:

{{1}}

还可以编写查询以获取第二个最旧的,第三个最旧的等记录。