仅在一列中选择具有唯一值的值对(SQL)

时间:2017-02-01 16:25:35

标签: sql vertica

我有4列,如下所示:

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-E已经被采用等。

结果应如下所示:

A E
B F
C G
D H

有什么想法吗?

1 个答案:

答案 0 :(得分: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列中包含重复项。