在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
有人有想法吗?
答案 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"));