2016-06-21 46 views
-1

Ich habe eine Abfrage zum Festlegen der Partitionen erstellen und verwendet die row_number das Problem hier ist ich verpasse bestimmte person_id Datensätze aber wann Ich benutze eine Bedingung wo ich den Rekord holen kann.Fehlende personid oder Felder bei der Verwendung der Zeilennummer über Partition, aber in der Lage, sie zu finden, wenn eine WHERE-Bedingung

`SELECT C.* FROM 
(SELECT 
B.PROVIDER_PAU_DK AS PROVIDER_PAU_DK, 
B.PERSON_ID AS PERSON_ID, 
B.POS_BEGIN_DATE AS POS_BEGIN_DATE, 
B.POS_END_DATE AS POS_END_DATE, 
ROW_NUMBER() OVER (PARTITION BY POS_END_DATE) AS ENDDATE 
FROM 
(SELECT 
A.PROVIDER_PAU_DK AS PROVIDER_PAU_DK, 
A.PERSON_ID AS PERSON_ID, 
A.POS_BEGIN_DATE AS POS_BEGIN_DATE, 
A.POS_END_DATE AS POS_END_DATE 
FROM 
(SELECT 
PROVIDER_PAU_DK, 
PERSON_ID, 
ROW_NUMBER() OVER (PARTITION BY  PERSON_ID,POS_BEGIN_DATE,POS_END_DATE) AS RN, 
--ROW_NUMBER() OVER (PARTITION BY PERSON_ID,POS_END_DATE) AS RN1, 
POS_BEGIN_DATE, 
POS_END_DATE 
FROM CCR_EDTWH.DIM_PROVIDER_PAU 
WHERE PERSON_ID in (16198964) 
ORDER BY PERSON_ID)A 
WHERE A.RN=1) B)C 
WHERE C.ENDDATE IN (1,2) 
--and person_id=16198964` 

Antwort

0

Sie POS_END_DATE partitionieren über und dann das Ergebnis filtern, um nur Zeilen mit enddate 1 und 2 enthalten Das bedeutet, wenn Ihre person_id Nummer 3 für ein bestimmtes Feld sein geschieht, wird es herausgefiltert werden. Wenn Sie jedoch speziell nach dem von Ihnen gesuchten Datensatz filtern, wird dieser der einzige in der Abfrage sein und eine kleinere Zeilennummer erhalten, durch die er angezeigt wird.

Für Ihre Tests würde ich den Filter auf den row_number Spalten entfernen, um zu sehen, was ihr Wert ist.