PostgreSQL复制具有两列重复的行

时间:2017-03-15 10:32:53

标签: postgresql postgresql-9.5

在PostgreSQL中,我正在寻找以下问题的答案。 有两列提供有关“开始”和“结束”的数据,以及“日期”列。目前,日期列仅存在一次,其中“开始”和“结束”充满了可能性。

我正在寻找使用唯一值创建“开始”和“结束”列的可能性,但具有重复日期。

电流:

id  date          start    end
1   2017-03-13    a        [null]
2   2017-03-14    [null]   a
3   2017-03-14    b        [null]
4   2017-03-16    [null]   b
5   2017-03-16    c        c

的愿望:

id  date          start    end
1   2017-03-13    a        [null]
2   2017-03-14    [null]   a
3   2017-03-14    b        [null]
4   2017-03-16    [null]   b
5   2017-03-16    c        [null]
6   2017-03-16    [null]   c

有人有想法吗?

1 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,并且您只想设置start"end"中的一个,并且date的组合是唯一的,那么您可以这样做:

ALTER TABLE tab
   ADD CHECK(start IS NULL AND "end" IS NOT NULL
          OR start IS NOT NULL AND "end" IS NULL);

CREATE UNIQUE INDEX ON tab (date, COALESCE(start, "end"));