2016-08-05 12 views
0

Ich arbeite mit zwei Tabellen in dieser Abfrage Table 1: admit, Table 2: Billing. Was ich tun möchte, ist, zeigen Menschen, die zu unseren Krisenleistungen (program codes '44282' and '44283') zugelassen sind. Für diese Leute möchte ich ihre Versicherung zeigen, die unter dem Feld guarantor_id in der Abrechnungstabelle steht. Um dies zu tun, muss ich ALLE effektiven Daten der maximalen Abdeckung zeigen cov_effective_date, wo das effektive Datum der Abdeckung weniger als das Aufnahmedatum preadmit_admission_date ist und das Verfallsdatum der Abdeckung cov_expiration_date ist größer als das Aufnahmedatum (oder Is Null). Der Code, den ich gerade habe, tut alles, was ich will, aber nicht alle effektiven Daten der maximalen Abdeckung. Wenn also jemand zwei verschiedene Versicherungen hatte, die am selben Tag begannen, wird nur einer angezeigt, und ich möchte, dass beide angezeigt werden.Auswahl aller Maximalwerte SQL-Abfrage

Select 
A.patid 
,A.episode_number 
,A.preadmit_admission_date 
,A.program_code 
,A.program_value 
,A.c_date_of_birth 
,A.guarantor_id 
,max(A.cov_effective_date) as "MaxDate" 

from(

Select 
    SA.patid 
,SA.episode_number 
,SA.preadmit_admission_date 
,SA.program_code 
,SA.program_value 
,SA.c_date_of_birth 
,BGE.guarantor_id 
,BGE.cov_effective_date 

From System.view_episode_summary_admit as "SA" 

Left Outer Join 

(Select 
    BG.patid 
    ,BG.episode_number 
    ,BG.guarantor_id 
    ,BG.cov_effective_date 
    ,BG.cov_expiration_date 

    from System.billing_guar_emp_data as "BG" 

    Inner Join 

    (Select patid, episode_number, preadmit_admission_date 
    from System.view_episode_summary_admit) as "A" 
    On 
    (A.patid = BG.patid) and (A.episode_number = BG.episode_number) 

    Where 
    BG.cov_effective_date <= preadmit_admission_date and 
(BG.cov_expiration_date >= preadmit_admission_date or 
    BG.cov_expiration_date Is Null) 
) as "BGE" 
    on 
(BGE.patid = SA.patid) and (BGE.episode_number = SA.episode_number) 

    Where 
    (program_code = '44282' or program_code = '44283') 
    and preadmit_admission_date >= {?Start Date} 
    and preadmit_admission_date <= {?End Date} 
    ) A 

    Group By Patid, Episode_number 
+0

Es tut uns leid, es ist pünktlich oder das wäre eine vollständige Antwort. Diese Abfrage wird in den meisten SQL-Sprachen nicht ausgeführt und verursacht einen Fehler. Wenn Sie aggregates verwenden, müssen Sie alle nicht aggregierten Spalten in der Gruppe verwenden. MySQL mag es, den Fehler zu überspringen und willkürlich Werte für Spalten zu sammeln, die nicht in der Gruppe enthalten sind. Lasst uns also dieses Aggregat loswerden. Sie haben eine Unterabfrage ... schreiben Sie eine Unterabfrage, die das Höchstdatum mit Ihrem Schlüssel abruft, verbinden Sie sie mit dem Rest Ihrer Aussage und verweisen Sie von dort auf sie. Wenn du weitere Hilfe brauchst, werde ich in ein paar Stunden etwas für dich haben. – Twelfth

+0

@Twelfth Ok, danke! Ich werde daran arbeiten. – Hound

+0

@Twelfth Ich habe versucht, Ihre Anweisungen zu befolgen, aber ich habe immer noch Probleme, meine Abfrage zu arbeiten. Wenn du noch Zeit hast, würde ich gerne sehen, was dir einfällt! – Hound

Antwort

1

Entschuldigung das ist so eine psuedo Antwort.

Select (your fields) 
from (your entire query)bg 
left join 
    (select patid, max(cov_effective_date) maxdate from system.billing_guar_emp_data group by patid) maxdate 
on maxdate.patid = bg.patidate 

die Gruppe bys für das Aggregat entfernen ... Sie nun als Feld maxdate.maxdate in Ihrer Eröffnungs select-Anweisung verweisen. Könnte ein besserer Ort sein, um sich diesem Maxdate anzuschließen, als am Ende der Anfrage (möglicherweise direkt unter BG in der from-Anweisung), aber psuedo code right? :) Hoffentlich können Sie das Konzept anwenden, lassen Sie mich wissen, dass ich am Nachmittag frei (freier?) Bin, wenn Sie mehr brauchen.

+0

Süße, ich habe den linken Join auf einen inneren Join geändert und bin der Episodennummer beigetreten und date sowie patid, und es hat funktioniert! Danke für die Hilfe! – Hound