2017-11-16 2 views
1

Ich versuche, 2 Abfragen mit einer verschachtelten Abfrage zu kombinieren. Die erste ist dies:Verschachtelte Abfragen in SQL

SELECT DISTINCT(de.MCH_CODE) AS Mach, md.MAT_CODE as ShortenCode, de.TIME as start_time 
FROM table1 AS de 
JOIN table1table2 AS md 
ON de.subcode= md.subcode 
WHERE de.ev = '123' AND de.time > '2017-11-14 07:00' and de.side = 'R' AND de.end IS NULL AND de.Subcat = 'STOP' 
ORDER BY de.time 

die das Ergebnis

Mach ShortenCode Tme 
Mach1 451   2017-12-25 08:25 
Mach2 854   2017-12-25 08:25 

451 auf Mach1 So erzeugt ist. Der knifflige Teil ist, dass ich für ShortenCode den vorherigen Mach zeigen möchte, dass es auf war. Es wäre so etwas wie:

SELECT distinct de.MCH_CODE FROM table1 AS de 
join table2 as md 
ON de.subcode = md.subcode 
WHERE de.ShortenCode = 'the ones displayed in the first query' 

Wie kann ich Unterabfrage:

Mach ShortenCode Tme     Mach(Previous)  
Mach1 451   2017-12-25 08:25 Mach4 
Mach2 854   2017-12-25 08:25 Mach5 

Basily Mach Spalte Mach1, Mach2 und auch Mach4 und Mach5 hat. Ich habe dies versucht, aber ohne Erfolg:

SELECT t1.Mach, t1.ShortenCode, t1.start_time, t2.PreviousMach 
    FROM(SELECT DISTINCT(de.MCH_CODE) AS Mach, md.MAT_CODE as ShortenCode, de.TIME as start_time, mch_ 
      FROM table1 AS de 
      JOIN table1table2 AS md 
      ON de.subcode= md.subcode 
      WHERE de.ev = '123' AND de.time > '2017-11-14 07:00' and de.side = 'R' AND de.end IS NULL AND de.Subcat = 'STOP' 
      ORDER BY de.time 
    ) t1 
    join 
     (SELECT distinct de.MCH_CODE FROM table1 AS de 
       join table2 as md 
       ON de.subcode = md.subcode 
       WHERE de.ShortenCode = t1.ShortenCode 
     ) t2 

Wenn Sie Vorschläge haben, würde ich

+3

'DISTINCT' ist ** nicht ** eine Funktion (auf einer Spalte). Es ist ein Teil von 'SELECT DISTINCT' und gilt für die gesamten ausgewählten Zeilen. Entfernen Sie diese überflüssigen Klammern, d. H. SELECT DISTINCT de.MCH_CODE AS Mach, ... '. – jarlh

+0

Überprüfen, Danke @jarlh. Was ist mit der Logik der Abfrage? Ist das der richtige Weg, die beiden zu kombinieren? – Christian

+1

Ich hasse Reverse Engineering-Anfragen. Siehe: [Warum sollte ich ein MCVE für eine scheinbar einfache SQL-Abfrage bereitstellen?] (Https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve- for-was-scheint-mir-sehr-einfach-sql-Abfrage) – Strawberry

Antwort

0

Sie das unten stehende Abfrage verwenden können, sehr schätzen Ihre Antwort zu bekommen.

SELECT distinct de.MCH_CODE FROM table1 AS de 
join 
table2 as md 
ON de.subcode = md.subcode WHERE de.ShortenCode 
in 
(
    select Table2.ShortenCode from 
    (
    SELECT DISTINCT de.MCH_CODE AS Mach, md.MAT_CODE as ShortenCode, de.TIME as start_time 
    FROM table1 AS de 
    JOIN table1table2 AS md 
    ON de.subcode= md.subcode 
    WHERE de.ev = '123' AND de.time > '2017-11-14 07:00' and de.side = 'R' AND de.end IS NULL AND de.Subcat = 'STOP' 
    ORDER BY de.time 
    ) Table2 
) 
+0

in der Tat, kopieren Sie einfügen Fehler. Vielen Dank –