2016-09-21 1 views
0

Извините, если это просто, но я как-то стучу головой на стол, потому что у меня всегда были проблемы с вложенными запросами.SQL - проверить, какая запись наступила раньше

Основной запрос: выберите FILENO, CODE, RECNO FROM DOCUMENT WHERE CODE = 'CODE1' приводит к следующей таблице.

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

Второй запрос: Select FILENO, КОД, RECNO ИЗ ДОКУМЕНТА ГДЕ КОД = результаты 'Кодекса2' в следующей таблице.

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

Что мне нужно, чтобы проверить, был ли CODE2 введен до CODE1. Результатом может быть первая таблица с столбцом RESULT с Y или N в ней.

+0

насчет равенства? что, если RecNo одинаково для одного и того же файла? Y/N или что? – xQbert

ответ

0

Не знаете, почему вы использовали бы вложенный запрос здесь. Кажется, что соединение будет работать, хотя вы не сказали, что должно произойти, если они равны.

Теперь, если есть, если код 1 или код2 не существует, то никакие записи не будут возвращены. мы могли бы использовать, если необходимо внешнее соединение ...

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' 
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; 
Смежные вопросы