2017-03-15 2 views
1

PostgreSQLでは、次の問題に対する答えを探しています。 「開始」と「終了」に関するデータを提供する2つの列と、「日付」列があります。現在のところ、日付の列は一度しか存在せず、 '開始'と '終了'の可能性があります。PostgreSQLは2つの列が重複している行を複製しています

私は、 '開始'と '終了'の列をユニークな値で作成する可能性を探していますが、日付は重複しています。現在

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

開始と終了に一意索引を作成します列。 – Mokadillion

+0

あなたの反応のMokadillionに感謝します。 "エラー:ユニークなインデックスを作成できませんでした" test_idx "DETAIL:キー(開始、終了)=(c、c)が重複しています。これは私が期待することですが、私の問題を解決する方法を見ていません。 – apt

+0

以下のように、endはキーワードであり、二重引用符で囲む必要があります。異なる名前を使用することをおすすめします。 – Mokadillion

答えて

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")); 
関連する問題