0

編集:メタで質問し、私の質問を変更することにしました。新しい追加は太字です。

重複する期間を見つける次のクエリがあります。

SELECT t1.id1, t2.id1
  FROM `mytable` AS t1
  JOIN `mytable` AS t2
    ON (
        ((t1.start_date BETWEEN t2.start_date AND t2.end_date))
        OR ((t1.end_date BETWEEN t2.start_date AND t2.end_date))
       )
 WHERE t1.id1 < t2.id1;

結果セットは次のとおりです。

id1    id1
 6      7
 8      9
 5      11
 10     12

次の結果が必要です。単一の列にすべての値を追加し、行がペアであることを示す列を追加して、後でその結果をここで使用できるようにします。シンプルなはずですが、うまくいきません。

col    pair_id
 6       1
 8       2
 5       3
 10      4
 7       1
 9       2
 11      3
 12      4
4

2 に答える 2

1

これは「ユニオン」と呼ばれる SQL の標準機能です。使用しているデータベース システムのドキュメントを参照してください。

于 2012-12-07T16:14:14.737 に答える
1

これが機能するかどうかはわかりませんが、試してください:

SELECT t1.id1
... snip ...
WHERE t1.id1 != t2.id1;

これにより、自己重複が明示的に除外され、「7」レコードが「6」の重複として表示されるようになります(サンプル結果による)。

于 2012-12-07T16:15:51.490 に答える