2016-11-15 185 views
0

更新行的子集,我有以下查詢,返回基於CON CBU和日期(出生日期)的訂單,組數據如何根據某些列

SELECT 
    cta.CODIGO, cta.cbu, cta.fecha 
FROM 
    CUENTA_BANCARIA as CTA 
WHERE 
    (CTA.ESTADO = 1) and (CTA.HABILITADA = 1) 
    AND EXISTS (SELECT C.* 
       FROM CUENTA_BANCARIA as C 
       WHERE (C.CODIGO != CTA.CODIGO) 
        AND (C.NRO_CTA = CTA.NRO_CTA) 
        AND (C.CBU = CTA.CBU) 
        AND (C.ESTADO = 1) 
        AND (C.HABILITADA = 1)) 
ORDER BY 
    CTA.CBU, CTA.FECHA DESC 

我需要更新與同任何CUENTA_BANCARIA CBU不具有最新的日期(出生日期)

例如,對於給定的結果,我需要更新codigo的CUENTA_BANCARIA以橙色高亮顯示,因爲它們都具有相同的CBU但老年人DATE(出生日期)

我該如何創建這樣的查詢?

enter image description here

+3

看看使用ROWNUMBER()與PARTITION BY子句。 – pmbAustin

+0

你需要更新到最新的日期,對吧? – Hackerman

+0

@Hackerman我需要更新所有的記錄,但不是那個「子集」的最新日期與同一個CBU –

回答

0

繼@pmbAustin sugestion約RowNumberPartition By這裏是解決

update cb 
set cb.HABILITADA = 0 
from CUENTA_BANCARIA cb 
where cb.codigo in (
select SubQuery.codigo 
(SELECT cta.CODIGO, cta.NRO_CTA, cta.cbu, cta.fecha, ROW_NUMBER() over (PARTITION BY CTA.cbu order by CTA.fecha desc) as numRepetido 
from CUENTA_BANCARIA as CTA 
where 
(CTA.ESTADO = 1) and (CTA.HABILITADA = 1) 
and 
exists (SELECT C.* FROM CUENTA_BANCARIA as C where (C.CODIGO != CTA.CODIGO) and (C.NRO_CTA = CTA.NRO_CTA) and (C.CBU = CTA.CBU) and (C.ESTADO = 1) and (C.HABILITADA = 1))) as SubQuery 
where SubQuery.numRepetido != 1) 
相關問題