2016-12-06 50 views
0

我有一個記錄集,其中一些行是重複的。特別是,它們在記錄集的最後三行中被複制。在整個四行中,我期望的正確結果集包括第一行和最後一行。我希望這樣做,因爲對於特定的SARAPPD_TERM_CODE_ENTRY,所需的記錄是SARAPPD_SEQ_NO值最大的記錄。所以,第一行是因爲對於特定的術語,序列號在最後一行是最大的,因爲序列號最大爲六。圖像和查詢如下。基於最大序列號查詢特定字段

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 

我相信這是一個簡單的「,其中本=(選擇MAX())類型的查詢,但我一直在努力一些不同的東西,並沒有什麼工作。我沒有變我想要的結果。因此,隨着中說,有這方面的幫助,將不勝感激。在此先感謝。

+0

可以讓你查詢S impler?例如,你可以擺脫額外的表,只是做一個自我查詢和使用SELECT XXX FROM YourTable WHERE APDC_CODE =(SELECT MAX(APDC_CODE)FROM ...)UNION ALL SELECT XXX FROM YourTable WHERE APDC_CODE =(SELECT MIN( APDC_CODE)FROM ...),以便將代碼簡化爲有效的東西。然後將其他表格一次一個添加回去。 – Missy

+1

這是什麼rdbms? SQL Server,MySQL等 – SQLChao

+0

@Missy我會嘗試做更多的事情,看看我是否可能錯過了一些東西。在......之前,我一直在一桌一桌地插上桌子,還「重新安排」桌子,以另一種方式解決問題。但我會看到還有什麼我可以拿出 – user1898629

回答

0

你可以使用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