2016-12-06 3 views
0

Ich habe einen Datensatz, wo einige der Zeilen dupliziert sind. Insbesondere werden sie für die letzten drei Zeilen des Datensatzes dupliziert. Von den gesamten vier Reihen würde die korrekte Ergebnismenge, die ich wünsche, die erste Reihe und die letzte Reihe umfassen. Ich wünsche dies, weil für einen bestimmten SARAPPD_TERM_CODE_ENTRY der Datensatz benötigt wird, für den der Wert SARAPPD_SEQ_NO maximal ist. Also, die erste Zeile, weil für diesen speziellen Begriff die Sequenznummer bei der ersten und letzten Zeile maximiert ist, weil die Sequenznummer bei sechs maximiert ist. Bild und Abfrage sind unten.Abfrage spezifisches Feld basierend auf max Sequenznummer

enter image description here

select ppd.sarappd_seq_no, ppd.sarappd_term_code_entry, ppd.sarappd_apdc_code, 
    dap. dap.saradap_term_code_entry, 
    spri.spriden_id, 
    t.sgbstdn_astd_code, t.* 
from sgbstdn t 
left join spriden spri on t.sgbstdn_pidm = spri.spriden_pidm 
left join saradap dap on spri.spriden_pidm = dap.saradap_pidm 
join sarappd ppd on dap.saradap_pidm = ppd.sarappd_pidm 
where t.sgbstdn_astd_code not in ('AS', 'DS', 'WD', 'SU', 'LA') 
and t.sgbstdn_stst_code = 'AS' 
and spri.spriden_change_ind is null 
and spri.spriden_id = '123456789' 
and (ppd.sarappd_apdc_code = 25 or ppd.sarappd_apdc_code = 30 
or ppd.sarappd_apdc_code =35) 
and ppd.sarappd_term_code_entry = dap.saradap_term_code_entry 

         --where b.sarappd_term_code_entry = ppd.sarappd_term_code_entry) 
order by ppd.sarappd_term_code_entry 

Ich glaube, dies ist ein einfacher „, wo dies = (select max()) Art der Abfrage, aber ich habe ein paar verschiedene Dinge versucht und nichts funktioniert. Ich bin nicht immer die Ergebnisse ich will. Also mit dieser sagte, jede Hilfe zu diesem Thema wäre sehr dankbar. Vielen Dank im Voraus.

+0

verwenden könnte können Sie Ihre Anfrage s machen implementieren? Zum Beispiel, können Sie die zusätzlichen Tabellen loswerden und tun Sie einfach eine Selbstabfrage und verwenden Sie SELECT XXX FROM YourTable WHERE APDC_CODE = (SELECT MAX (APDC_CODE) VON ...) UNION ALLE SELECT XXX FROM YourTable WHERE APDC_CODE = (SELECT MIN (APDC_CODE) FROM ...), um Ihren Code in etwas zu vereinfachen, das funktioniert. Fügen Sie dann die anderen Tabellen nacheinander hinzu. – Missy

+1

Was ist das für rdbms? SQL Server, MySQL usw. – SQLChao

+0

@Missy Ich werde versuchen, dies mehr zu tun, um zu sehen, ob ich etwas verpasst haben könnte. Ich hatte schon Tisch für Tisch angeschlossen ... und auch die Tische neu arrangiert, um das Problem auf andere Weise zu lösen. Aber ich werde sehen, was ich sonst mit – user1898629

Antwort

0

Sie ROW_NUMBER()

;WITH cte 
AS 
(select 
    ROW_NUMBER() OVER (PARTITION BY SARAPPD_TERM_CODE_ENTRY ORDER BY SARAPPD_SEQ_NO DESC) AS RN 
    ppd.sarappd_seq_no, 
    ppd.sarappd_term_code_entry, 
    ppd.sarappd_apdc_code, 
    dap. dap.saradap_term_code_entry, 
    spri.spriden_id, 
    t.sgbstdn_astd_code, t.* 
from sgbstdn t 
left join spriden spri on t.sgbstdn_pidm = spri.spriden_pidm 
left join saradap dap on spri.spriden_pidm = dap.saradap_pidm 
join sarappd ppd on dap.saradap_pidm = ppd.sarappd_pidm 
where t.sgbstdn_astd_code not in ('AS', 'DS', 'WD', 'SU', 'LA') 
and t.sgbstdn_stst_code = 'AS' 
and spri.spriden_change_ind is null 
and spri.spriden_id = '123456789' 
and (ppd.sarappd_apdc_code = 25 or ppd.sarappd_apdc_code = 30 
or ppd.sarappd_apdc_code =35) 
and ppd.sarappd_term_code_entry = dap.saradap_term_code_entry 
order by ppd.sarappd_term_code_entry) a 


SELECT * 
FROM cte WHERE rn = 1 
Verwandte Themen