2017-11-13 1 views
-1

Ich denke, es gibt ein Problem mit dem A2-Set, wo ich nur Restart_case = Y, aber ich bin mir nicht sicher, bitte helfen Sie. Ich erhalte diesen Fehler: Ein unerwartetes Token "WHERE" wurde nach "_ID) AS Max_DateBegin" gefunden. Erwarteten Token können ... DankeSQL Sub-Abfrage Fehler

SELECT A2.* FROM 
(SELECT A1.*, min(BeginDate) OVER (PARTITION BY Per_ID) AS Min_BeginDate, 
MAX(BeginDate) OVER (PARTITION BY Per_ID) AS Max_BeginDate 
WHERE RestartCase = 'Y' 
From) A2 
(SELECT distinct C.Per_ID, P.DOB, C.BeginDate, C.EndDate, C.RestartCase, P.per_type 
FROM CaseSum C LEFT JOIN PERSON p on C.ID_PRSN = P.ID_PRSN) A1 
WHERE per_Type = 1 AND BeginDate <= '9/30/2017' AND (EndDate >= '10/01/2017' OR EndDate IS NULL) 
ORDER BY A1.Per_ID 
+0

Für Starter haben Sie keine Tabelle in der 'FROM' für A2 angegeben. Danach bin ich verwirrt, weil Sie 2 abgeleitete Tabellen haben, aber sie sind nicht verbunden, so dass ich nicht sicher bin, was Sie tun. – SQLChao

+0

@SQLChao Ich bin neu in SQL und versuche, das Ergebnis von A1 zu bekommen, damit ich einige Berechnungen (min date und max date) mit der RestartCase Bedingung machen kann. Ich weiß nicht, wie ich diese Art von Abfrage schreiben kann, also habe ich es einfach versucht und bin dazu gekommen. Danke für die Antwort. – user470091

+0

@a_horse_with_no_name DB2 – user470091

Antwort

0

Ich glaube, das ist das, was Sie wollen (oder so ähnlich):

SELECT A2.* FROM (SELECT A1.*, MIN(BeginDate) OVER (PARTITION BY Per_ID) AS Min_BeginDate, MAX(BeginDate) OVER (PARTITION BY Per_ID) AS Max_BeginDate FROM (SELECT DISTINCT C.Per_ID, P.DOB, C.BeginDate, C.EndDate, C.RestartCase, P.per_type FROM CaseSum C LEFT JOIN PERSON P on C.ID_PRSN = P.ID_PRSN WHERE P.per_Type = 1 AND C.BeginDate <= '9/30/2017' AND (C.EndDate >= '10/01/2017' OR C.EndDate IS NULL) ) A1 WHERE A1.RestartCase = 'Y' ORDER BY A1.Per_ID ) A2

+0

Etwas Fehler mit Code. Kann nicht ausgeführt werden – user470091

+0

Bearbeitete das obige SQL. Versuch das? –

+0

Auch, was ist dein Fehler? –

0

Betrachten sie ein bedingtes CASE Inline-Aggregat in Ihrer Fensterfunktion Kombinieren beider Versuchsergebnissätze:

SELECT DISTINCT C.Per_ID, P.DOB, C.BeginDate, C.EndDate, C.RestartCase, P.per_type, 
       MIN(CASE WHEN C.RestartCase = 'Y' THEN C.BeginDate END) 
           OVER (PARTITION BY C.Per_ID) AS Min_BeginDate, 
       MAX(CASE WHEN C.RestartCase = 'Y' THEN C.BeginDate END) 
           OVER (PARTITION BY C.Per_ID) AS Max_BeginDate  
FROM CaseSum C 
LEFT JOIN PERSON P on C.ID_PRSN = P.ID_PRSN 
WHERE P.per_Type = 1 AND C.BeginDate <= '9/30/2017' 
    AND (C.EndDate >= '10/01/2017' OR C.EndDate IS NULL) 
ORDER BY C.Per_ID 
+0

Danke für die Antwort. Ich möchte ReportCase = Y nur auf Spalten mit minimalem und maximalem Datum anwenden. Nicht für alle Abfragen – user470091