2017-02-01 2 views
1

私は以下のように4列、持っている:選択のペアのみ(SQL)

COL1 COL1_TIME COL2 COL2_TIME 
    A 09:20:00 E 09:35:00 
    A 09:20:00 F 09:36:00 
    A 09:20:00 G 09:40:00 
    A 09:20:00 H 09:59:00 
    B 09:25:00 E 09:35:00 
    B 09:25:00 F 09:36:00 
    B 09:25:00 G 09:40:00 
    B 09:25:00 H 09:59:00 
    C 09:30:00 E 09:35:00 
    C 09:30:00 F 09:36:00 
    C 09:30:00 G 09:40:00 
    C 09:30:00 H 09:59:00 
    D 09:50:00 H 09:59:00 

を、私は、列COL1とCOL2の値のユニークな組み合わせを選択する必要があります。ペアを見つけるには、COL2_TIMEでCOL1_TIMEに最も近い時刻を取る必要があります。

A E 
B F 
C G 
D H 

任意のアイデア: -

だから、Aのためのcolsest時間はE.はBのためにそのFであるEは、すでに使用されているなど

結果は次のようになりますか?

+0

これらの値を「列3でユニーク」にする理由は何ですか?私は論理に従わない。 –

答えて

0

私が正しく理解していれば、あなたはこれを行うことができます。

select t.* 
from (select t.*, row_number() over (partition by col3 order by col4) as seqnum 
     from t 
    ) t 
where seqnum = 1; 

これは3列の値が一意であることを保証します。列1に重複を持たせることができます。

+0

それは私が必要とするものではない、私は最初に(c4でc1時間に最も近い)c3の値を見つける必要があり、それはc1と対になる - したがって、最初のペアはA - E、2番目はB - F、A - F.クエリはA-E、A-F、A-G、A-Hを返すので、実際にはc3のユニークな値だけでなく、ユニークなペアが必要です。 –

+0

@MichałPolowczyk。 。 。私はあなたが別の質問をし、本当に必要なものを説明するべきだと思います。コメントに質問をするべきではありません。 –

+0

ok、私は質問 –