1

みんなおはよう;

私は次の表を持っています

Date       Duration         COT             TD            RID
6/26       30               PT              OT            1
6/26       15               OT              PT            1
6/27       60               PT              OT            1
6/27       60               OT              PT            1
6/28       15               SS              MM            1
6/28       30               SS              MM            1
6/28       15               MM              SS            1
6/28       30               MM              SS            1

私がやろうとしているのは、以下が当てはまるテーブル自体に参加してレコードをプルすることです:

  1. T1.TD = T2.COT
  2. T1.COT = T2.TD
  3. T1.Duration <> T2.Duration
  4. T1.Date = T2.Date
  5. T1.RID = T2.RID

T1 と T2 は同じテーブルです。私がこれまでに持っているものは次のとおりです。

SELECT *
FROM T1
WHERE NOT EXISTS (SELECT 1 FROM T2
    WHERE T1.Date = T2.Date 
    AND T1.COT = T2.TD 
    AND T1.TD = T2.COT
    AND T1.RID = T2.RID 
    AND T1.Duration = T2.Duration)

2行がその基準を満たしているため、明らかに上記は2行を取得します。しかし、私は本当にテーブルから単一の行を取得したいだけです. これを行う方法はありますか、それとも別の方法がありますか?

編集:追加の行を追加しました-どれも選択してはいけません。6/28 に一致しない行がありますが、それらは一致します。行 1 と 3、2 と 4 は 6/28 に一致するため、最終的なデータセットから制限する必要があります。つまり、RID の日に一致するレコードがある場合は、それらを選択しないでください。

4

3 に答える 3

0

2 つのポイント:

  1. double をフィルタリングするには、任意の基準を使用する必要があります
  2. グループ化と結合の概念を分離する必要があります

次の解決策を試してください。

    SELECT 
      T1.TD, T1.COT, T1.DATE, T1.RID, MIN(T1.DURATION), MAX(T1.DURATION)
    FROM
       DEMO T1 JOIN DEMO T2 ON (
         T1.TD = T2.COT AND
         T1.COT = T2.TD AND
         T1.TD < T2.TD -- Arbitrary filtering one of each double
       )
    GROUP BY
       T1.TD, T1.COT, T1.DATE, T1.RID   
    HAVING
       MIN(T1.DURATION) <> MAX(T1.DURATION)
    ;

フィドルについては、こちらを参照してください。

于 2013-10-08T15:08:47.397 に答える
0

最終出力でどの行が好きかについての基準を設定する必要がある場合があります。以下にいくつかの例を示します。

最終出力にランダムな行が必要な場合:

Select top 1 * from t1 as T1 
Join t1 as T2 on T1.TD = T2.COT 
AND T1.COT= T2.TD
AND T1.Duration <> T2.Duration
AND T1.Date1 = T2.Date1
AND T1.RID = T2.RID    

期間に基づいて行を取得することを選択した場合:

Select * from t1 as T1 
Join t1 as T2 on T1.TD = T2.COT 
AND T1.COT= T2.TD 
AND T1.Duration <> T2.Duration 
AND T1.Date1 = T2.Date1
AND T1.RID 2.RID   
AND T1.duration > T2.duration
于 2013-10-08T14:27:14.960 に答える