SQL - 检查哪个记录首先出现

时间:2016-09-21 20:26:05

标签: sql compare nested-query

很抱歉,如果这很简单,但不知怎的,我在我的桌子上敲打头,因为我总是遇到嵌套查询的问题。

基本查询:选择FILENO,CODE,RECNO FROM DOCUMENT WHERE CODE =' CODE1'结果如下表所示。

FILENO    CODE    RECNO
FILE1     CODE1   13494
FILE2     CODE1   13499
FILE3     CODE1   13597

第二个查询:选择FILENO,CODE,RECNO FROM DOCUMENT,其中CODE =' CODE2'结果如下表所示。

FILENO    CODE    RECNO
FILE1     CODE2   13495
FILE2     CODE2   13498
FILE3     CODE2   13600

我需要检查CODE2是否在CODE1之前输入。结果可能是第一个带有RESULT列的表,其中包含Y或N.

2 个答案:

答案 0 :(得分:0)

不确定为什么要在这里使用嵌套查询。一个连接似乎可以工作..虽然你没有说如果两者相等会发生什么。

现在,如果现在不存在code1或code2,则不会返回任何记录。如果需要,我们可以使用外连接......

SELECT A.FileNo
     , A.Code
     , A.RecNo
     , CASE when A.RecNo > B.RecNo then 'Y' 
            when A.RecNo < B.RecNo then 'N' 
            else 'Undef' End as isCode1Newer
FROM Document A
INNER JOIN Document B
  on A.FileNo = B.FileNo
WHERE A.Code = 'CODE1'
  and B.Code = 'CODE2' 

答案 1 :(得分:0)

您可以聚合每个代码来检查这一点,以便只需阅读一次表:

select
  code,
  case when
    max(case when code = 'CODE1' then recno end) >
    max(case when code = 'CODE2' then recno end) then 'Y' else 'N'
  end as c2_before_c1
from mytable
where code in ('CODE1', 'CODE2')
group by code;