仅当列值按固定顺序出现时才选择行(oracle)

时间:2015-08-08 17:49:22

标签: oracle

TABLE A:

ColumnA ColumnB ColumnC ColumnD
77777     89      ABC   11:33:01
77777     88      ABC   11:33:09

77776     89      ABC   10:00:01
77776     88      ABC   10:34:01
77776     87      ABC   10:35:10

77775     88      ABC   11:32:48
77775     89      ABC   11:33:09
77775     61      DEF   11:38:21

因此,我需要选择两行77777和77776,因为77775有88

值为第一,89为第二,而期望反之亦然

我有这个查询(查询允许我仅在89和88

时选择行

共存,但需要检查它们出现的顺序:

select ta.COLUMNA from TABLEA ta 
where ta.COLUMNB in (89,88) 
group by ta.COLUMNA 
having count(distint ta.COLUMNB)=2;

这将选择上表中的所有结果

1 个答案:

答案 0 :(得分:1)

我认为你可以通过以

的形式加入自身来解决这个问题
SELECT JOINTABLEA.COLUMNA FROM TABLEA JOINTABLEA
JOIN TABLEA JOINTABLEB 
ON JOINTABLEB.COLUMND > JOINTABLEA.COLUMND
WHERE JOINTABLEA.COLUMNB = 89
AND JOINTABLEB.COLUMNB = 88
GROUP BY JOINTABLEA.COLUMNA

我做了一个小的SQLFiddle示例here,虽然我只使用数字而不是ColumnD的日期时间列