2016-02-29 65 views
1

目前我有這個表在sql數據庫按帳戶#排序。選擇列中值改變的行

Account# Charge_code PostingDate  Balance 
    12345   35  1/18/2016  100 
**12345   35  1/20/2016  200** 
    12345   61  1/23/2016  250 
    12345   61  1/22/2016  300 
    12222   41  1/20/2016  200 
**12222   41  1/21/2016  250** 
    12222   42  1/23/2016  100 
    12222   42  1/25/2016  600 

如何在每個Account#的charge_code列更改之前選擇最後一行。我突出顯示了我試圖返回的行。

該查詢應該快速執行,該表具有數萬條記錄。

+0

你的意思是選擇按PostingDate排序的最後一行? –

+0

分享你的研究可以幫助每個人。告訴我們你試過了什麼,以及它爲什麼不符合你的需求。這表明你已經花時間去嘗試幫助自己,它使我們避免重申明顯的答案,最重要的是它可以幫助你得到更具體和相關的答案!另見[問]。 記住SO不是免費的代碼服務! –

+0

選擇一個。[帳號] ,一個。[Charge_Code] ,一個。[PostingDate] ,一個。[平衡] 從[DBO]。[SampleTable]作爲 交叉聯接[DBO]。[SampleTable ]作爲b 其中a。[Account#] = b。[Account#] 和a。[PostingDate]> b。[PostingDate] 並且不存在(從[dbo]選擇* 。[SampleTable] as c a。[Account#] = c。[Account#] and a。[PostingDate]> c。[PostingDate] and c。[PostingDate]> b。[PostingDate] ) and a。[Charge_Code] < > b。[Charge_Code] –

回答

1

在SQL Server 2012+,你可以使用lead()

select t.* 
from (select t.*, 
      lead(charge_code) over (partition by account order by postingdate) as next_charge_code 
     from t 
    ) t 
where charge_code <> next_charge_code; 

在早期版本的SQL Server,你可以用apply類似的東西。

+0

謝謝Gordon它的工作! –