ओरेकल एसक्यूएल सहसंबंधित सबक्वायरी (जहां कथन में) कोई परिणाम नहीं है - एसक्यूएल, ऑरैकल, डेटाटाइम, सबक्वायरी, सहसंबंधित-सबक्वायरी

हाय और पढ़ने के लिए शुक्रिया,

I am trying to run the following SQL query with सहसंबद्ध उपशम और यह कोई परिणाम नहीं ला रहा है। मैं सबक्वेरी का उपयोग केवल उन परिणामों को वापस लाने के लिए कर रहा हूं जिनमें सबसे कम तिथि सीमा है। अकेले क्वेरी और सबक्वेरी दोनों ही ठीक काम करते हैं।

कोई विचार? क्या मैं सहसंबद्ध उपशम को गलत तरीके से जोड़ रहा हूँ?

नोट: सहसंबद्ध उपश्रेणी क्वेरी की अंतिम पंक्ति पर है

धन्यवाद, Willz06jw

SELECT aaa."effective_time",
aaa."event_type_c",
"clarity_dep"."department_name",
"patient"."birth_date",
"patient"."pat_mrn_id",
"zc_ped_delivr_meth"."name",
"zc_ped_delivr_meth"."ped_delivr_meth_c",
aaa."department_id",
"clarity_dep"."department_id",
aaa."alt_event_type_c",
aaa."in_event_type_c"
FROM   (("CLARITY"."clarity_adt" aaa
inner join "CLARITY"."clarity_dep" "CLARITY_DEP"
ON aaa."department_id" = "clarity_dep"."department_id")
inner join "CLARITY"."patient" "PATIENT"
ON aaa."pat_id" = "patient"."pat_id")
inner join "CLARITY"."zc_ped_delivr_meth" "ZC_PED_DELIVR_METH"
ON "patient"."ped_delivr_meth_c" =
"zc_ped_delivr_meth"."ped_delivr_meth_c"
WHERE  ( "patient"."birth_date" >= To_date ("01-12-2012 00:00:00",
"DD-MM-YYYY HH24:MI:SS")
AND "patient"."birth_date" < To_date ("06-12-2012 00:00:00",
"DD-MM-YYYY HH24:MI:SS"
) )
AND ( aaa."department_id" = 236601
OR aaa."department_id" = 236703
OR aaa."department_id" = 236801
OR aaa."department_id" = 236901
OR aaa."department_id" = 237101
OR aaa."department_id" = 237201 )
AND aaa."event_type_c" = 3
AND aaa."effective_time" = (SELECT Min(bbb."effective_time")
FROM   "clarity_adt" bbb
WHERE  aaa."pat_id" = bbb.pat_id)

उत्तर:

जवाब के लिए 2 № 1

पूरे बयान के माध्यम से स्थानांतरित किए बिना, सबसे आसान समाधान केवल एक का उपयोग करके चयन में बयान को लपेटना होगा ROW_NUMBER सबसे कम दिनांक प्राप्त करने के लिए कार्य करते हैं।

SQL कथन 1

SELECT  *
FROM    (
SELECT ROW_NUMBER() OVER (PARTITION BY pat_id ORDER BY effective_time) AS rn,
aaa."effective_time",
aaa."event_type_c",
"clarity_dep"."department_name",
"patient"."birth_date",
"patient"."pat_mrn_id",
"zc_ped_delivr_meth"."name",
"zc_ped_delivr_meth"."ped_delivr_meth_c",
aaa."department_id",
"clarity_dep"."department_id",
aaa."alt_event_type_c",
aaa."in_event_type_c"
FROM   "CLARITY"."clarity_adt" aaa
inner join "CLARITY"."clarity_dep" "CLARITY_DEP" ON aaa."department_id" = "clarity_dep"."department_id"
inner join "CLARITY"."patient" "PATIENT" ON aaa."pat_id" = "patient"."pat_id"
inner join "CLARITY"."zc_ped_delivr_meth" "ZC_PED_DELIVR_METH" ON "patient"."ped_delivr_meth_c" = "zc_ped_delivr_meth"."ped_delivr_meth_c"
WHERE  ( "patient"."birth_date" >= To_date ("01-12-2012 00:00:00", "DD-MM-YYYY HH24:MI:SS")
AND "patient"."birth_date" < To_date ("06-12-2012 00:00:00", "DD-MM-YYYY HH24:MI:SS" ) )
AND ( aaa."department_id" = 236601 OR aaa."department_id" = 236703 OR aaa."department_id" = 236801 OR aaa."department_id" = 236901 OR aaa."department_id" = 237101 OR aaa."department_id" = 237201 )
AND aaa."event_type_c" = 3
) q
WHERE   q.rn = 1

आपके कथन को सरल बनाया जा सकता है (इसे पढ़ने में) एक का उपयोग करके IN कथन io। आल थे ORइस तरह के बयान

SQL कथन 2

SELECT  *
FROM    (
SELECT ROW_NUMBER() OVER (PARTITION BY pat_id ORDER BY effective_time) AS rn,
aaa."effective_time",
aaa."event_type_c",
"clarity_dep"."department_name",
"patient"."birth_date",
"patient"."pat_mrn_id",
"zc_ped_delivr_meth"."name",
"zc_ped_delivr_meth"."ped_delivr_meth_c",
aaa."department_id",
"clarity_dep"."department_id",
aaa."alt_event_type_c",
aaa."in_event_type_c"
FROM   "CLARITY"."clarity_adt" aaa
inner join "CLARITY"."clarity_dep" "CLARITY_DEP" ON aaa."department_id" = "clarity_dep"."department_id"
inner join "CLARITY"."patient" "PATIENT" ON aaa."pat_id" = "patient"."pat_id"
inner join "CLARITY"."zc_ped_delivr_meth" "ZC_PED_DELIVR_METH" ON "patient"."ped_delivr_meth_c" = "zc_ped_delivr_meth"."ped_delivr_meth_c"
WHERE  ( "patient"."birth_date" >= To_date ("01-12-2012 00:00:00", "DD-MM-YYYY HH24:MI:SS")
AND "patient"."birth_date" < To_date ("06-12-2012 00:00:00", "DD-MM-YYYY HH24:MI:SS" ) )
AND ( aaa."department_id" IN (236601,236703,236801,236901,237101,237201) )
AND aaa."event_type_c" = 3
) q
WHERE   q.rn = 1

अंत में, मैं इसे और भी सरल बनाकर सभी तालिकाओं को जोड़कर और एक का उपयोग करूँगा WITH बयान। अंतिम परिणाम इस तरह दिखेगा

SQL कथन 3

;WITH q AS (
SELECT ROW_NUMBER() OVER (PARTITION BY pat_id ORDER BY effective_time) AS rn,
aaa."effective_time",
aaa."event_type_c",
cd."department_name",
p."birth_date",
p."pat_mrn_id",
pdm."name",
pdm."ped_delivr_meth_c",
aaa."department_id",
cd."department_id",
aaa."alt_event_type_c",
aaa."in_event_type_c"
FROM   "CLARITY"."clarity_adt" aaa
inner join "CLARITY"."clarity_dep" cd ON aaa."department_id" = cd."department_id"
inner join "CLARITY"."patient" p ON aaa."pat_id" = p."pat_id"
inner join "CLARITY"."zc_ped_delivr_meth" pdm ON p."ped_delivr_meth_c" = pdm."ped_delivr_meth_c"
WHERE  p."birth_date" >= To_date ("01-12-2012 00:00:00", "DD-MM-YYYY HH24:MI:SS"
AND p."birth_date" < To_date ("06-12-2012 00:00:00", "DD-MM-YYYY HH24:MI:SS" ) )
AND aaa."department_id" IN (236601,236703,236801,236901,237101,237201)
AND aaa."event_type_c" = 3
)
SELECT  *
FROM    q
WHERE   rn = 1

जवाब के लिए 0 № 2

आप केवल पंक्तियों को प्राप्त करने जा रहे हैं यदि पंक्ति के साथजल्द से जल्द तारीख भी स्पष्टता_अदालत पर अन्य शर्तों से मेल खाती है। यदि आप उस सबसेट के लिए जल्द से जल्द रिकॉर्ड चाहते हैं तो आपको "उन परिस्थितियों को अधीनता में धकेलना होगा।"


संबंधित सवाल
सबसे लोकप्रिय