2017-07-01 4 views
0

表内のすべての有効なタイムスライスを取得します 今私は同時に有効ですアッレPK を取得する可能性を探していますたとえば、私のテーブルには、次のようになります。私はエントリはSCD 2でhistorizedされたテーブルを持っている

PK;ValidFrom;ValidTo 
635582110901;2016-01-04;2016-01-21 
635582110901;2016-01-22;2016-01-26 
635582110901;2016-01-27;2016-02-14 
635582110901;2016-02-15;2016-11-10 
**635582110901;2016-11-11;2017-01-23** 
**635582110901;2016-11-16;2016-12-12** 
635582110901;2016-12-13;2017-01-18 
635582110901;2017-01-19;2017-01-22 
635582110901;2017-01-23;2017-01-23 
635582110901;2017-01-24;2017-02-21 
635582110901;2017-02-22;9999-12-31 

選択2大胆な行

私に与える必要がありますおかげであなたの助け

答えて

0

existsを使用できます。

select t.* 
from t 
where exists (select 1 
       from t t2 
       where t2.validfrom < t.validto and 
        t2.validto > t.validfrom and 
        t2.pk = t.pk and 
        t2.validfrom <> t.validfrom and 
        t2.validto <> t.validto 
      ); 
+0

あなたは本当ですか?だから私はすべての11のrecors – AmBlack

+0

@AmBlackを選択します。 。 。私は今確信しています。私は時間の重複に焦点を当てて、2つの他の重要な条件を省いた:(1)主キーは同じでなければならない。 (2)レコードが重複している。レコードに重複があると、レコードが見つからなくなります。 –

+0

ありがとう!私はポイント1と2であなたに同意します。この場合の悪いレコードは、ValidFrom 20161111とValidTo 20170123でこれがあります。あなたはこの悪者をすべてアップデートする方法を持っていますか? de validToを(この場合は)15.11.16に設定しますか? – AmBlack

関連する問題