2016-09-21 2 views
0

Sorry, wenn das einfach ist, aber irgendwie hämmere ich meinen Kopf auf meinem Schreibtisch, weil ich immer Probleme mit verschachtelten Abfragen hatte.SQL - Überprüfen Sie, welcher Datensatz zuerst kam

Grundlegende Abfrage: Wählen Sie FILENO, CODE, RECNO FROM DOKUMENT WHERE CODE = 'CODE1' in der folgenden Tabelle.

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

Zweite Abfrage: Wählen Sie FILENO, CODE, RECNO aus dem Dokument WO CODE = 'CODE2 die Ergebnisse in der folgenden Tabelle.

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

Was ich brauche, ist zu prüfen, ob CODE2 vor CODE1 eingegeben wurde. Das Ergebnis könnte die erste Tabelle mit einer RESULT-Spalte mit Y oder N sein.

+0

Was ist Gleichheit? Was ist, wenn RecNo für dieselbe Datei gleich ist? J/N oder was? – xQbert

Antwort

0

Nicht sicher, warum Sie hier eine verschachtelte Abfrage verwenden würden. Ein Join scheint zu funktionieren .. obwohl du nicht gesagt hast, was passieren soll, wenn die beiden gleich sind.

Wenn jetzt entweder Code1 oder Code2 nicht vorhanden sind, werden keine Datensätze zurückgegeben. wir könnten eine äußere Verknüpfung verwenden, wenn nötig ...

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

Sie per Code dieses Aggregat kann zu überprüfen, um die Tabelle zu haben nur einmal zu lesen:

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; 
Verwandte Themen