sqlserver取分組數據的最后一條數據


SQL Server中ROW_NUMBER()函數的使用 參考文章:https://blog.csdn.net/pan_junbiao/article/details/79941162

業務中的問題:固定資產的單價和總價由於設置成小數點兩位,導致資產的總數拆分數量后的單價和單價乘數量的值並不完全相同,有小數點上的問題。

如某資產總價為10,數量為3個, 則單價 10/3=3.333333333  這里取兩位小數存為3.33

但單價*數量后  3.33*3=9.99,9.99和10相差0.01。由於數據庫的單價和總價設置都為兩位小數點,所以小數點問題無法進行完全匹配。

解決方案是將小數點的把尾差放到其中一個資產,也就是說 總資產價值為10,數量為3的資產,通過將其中一個資產的單價加0.01 實現資產單價乘上數量后和總價完全匹配。

 

解決的思路:將整合的小數點有問題資產整合成excel,其中主要包括資產編號和總價差兩個字段

將excel導入到數據庫中生成臨時表,通過資產編號關聯資產表和臨時表,取到資產分組的最后一個資產的id(ROW_NUMBER() OVER(ORDER BY Score DESC)),將這些資產的單價加上總價差,然后批量修改完成對所有有問題的資產進行了校對   

貼上sql語句

--修改單價問題
update tab_assets set price=price+wrongprice$.pricenum from wrongprice$ join tab_assets on wrongprice$.code=tab_assets.code where tab_assets.id in(select id from (SELECT ROW_NUMBER() OVER(PARTITION BY code ORDER BY id desc ) AS Row_Index,*
FROM tab_assets
where tab_assets.code in('A104201900001','A104201900002','A104201900003','A104201900005','A201201800800','A201201800814','A201201900033','A201201900034','A201201900035','A201201900038','A201201900039','A201201900078','A201201900126','A202201800067','A230201900001','A230201900002','A232201800168','A232201800233','A232201800236','A232201800237','A232201800245','A232201800246','A232201900002','A232201900021','A501201900003','A601201800330','A601201800354','A601201900013')) t
where t.Row_Index=1)

附上導入的臨時表,資產編號和價差字段

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM