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)
附上导入的临时表,资产编号和价差字段

sqlserver取分组数据的最后一条数据的更多相关文章
- SQL分组排序后取每组最新一条数据的另一种思路
在hibernate框架和mysql.oracle两种数据库兼容的项目中实现查询每个id最新更新的一条数据. 之前工作中一直用的mybatis+oracle数据库这种,一般写这类分组排序取每组最新一条 ...
- MySQL 分组后取每组前N条数据
与oracle的 rownumber() over(partition by xxx order by xxx )语句类似,即:对表分组后排序 创建测试emp表 1 2 3 4 5 6 7 8 9 ...
- oracle取order by的第一条数据
SELECT * FROM (SELECT * FROM TABLE_NAME ORDER BY COL1) WHERE ROWNUM = 1; 备注: 1.不能给 (SELECT * FROM TA ...
- 怎么在一个list集合里面筛选重复的数据,在重复的数据中取最后添加的那条数据
1.先将集合进行分组(分组字段)2.在判断分组的数量是否大于 03.大于0,则有重复的数据
- MS SQL 取分组后的几条数据
SELECT uploaddate ,ptnumber ,instcount FROM ( SELECT ROW_NUMBER() OVER( PARTITION BY uploaddate ORDE ...
- 最短时间(几秒内)利用C#往SQLserver数据库一次性插入10万条数据
用途说明: 公司要求做一个数据导入程序,要求将Excel数据,大批量的导入到数据库中,尽量少的访问数据库,高性能的对数据库进行存储.于是在网上进行查找,发现了一个比较好的解决方案,就是采用SqlBul ...
- 基于mysql实现group by取各分组最新一条数据
准备数据 SQL语句 SELECT * FROM admin WHERE id IN ( SELECT MAX( id ) FROM admin GROUP BY order_id ); 查询结果:
- oracle取分组的前N条数据
select * from(select animal,age,id, row_number()over(partition by animal order by age desc) row_num ...
- sqlserver 返回刚插入的那条数据
insert into xxxxxx(Col_002,UrgentStatus,DoWorkShop,Col_004,Col_005,Col_006,Col_003,Col_007,postQQ,Co ...
随机推荐
- 吴裕雄--天生自然python学习笔记:python 用pygame模块游戏开发
游戏开发在软件开发领域占据了非常重要的位直.游 戏开发需要用到的技术相当广泛,除了多媒体.图片.动 画的处理外,程序设计更是游戏开发的核心内容. Py game 是为了让 Python 能够进行游戏开 ...
- 算法笔记4.3递归 问题 A: 吃糖果
问题 A: 吃糖果 题目描述 名名的妈妈从外地出差回来,带了一盒好吃又精美的巧克力给名名(盒内共有 N 块巧克力,20 > N >0). 妈妈告诉名名每天可以吃一块或者两块巧克力. 假设名 ...
- php启动后netstat看不到9000端口的问题
https://www.cnblogs.com/jonsea/p/5522018.html php-fpm配置文件详解 其实就是PHP配置文件改一个参数 listen = 127.0.0.1: ...
- 1、简述在java网络编程中,服务端程序与客户端程序的具体开发步骤?
网络编程分为UDP通信和TCP通信 UDP协议: 发送端:1.创建DatagramSocket对象.2.创建DatagramPacket对象,并封装数据.3.发送数据.4.释放 资源. 接收端:1.创 ...
- Skype for Business
Skype for Business提供在线会议.即时消息.视频会议等功能 一.界面介绍 1.登陆主界面,选择当前在线状态 2.添加联系人 在搜索框中输入想要寻找用户的姓名.电子邮件地址或电话号码-& ...
- xml字符串转json字符串
XML字符串转JSON字符串网上的方法很多,这里主要推荐两种: 1.使用org.json包 jar地址:http://mvnrepository.com/artifact/org.json/json ...
- django框架进阶-使用缓存-长期维护
############### django-缓存页面 ############### ########################################### # 全站缓存, ...
- spring事务管理(xml配置)与spring自带连接数据库JdbcTemplate
什么是事务,很通俗的话来说就是,我们日常生活中总会出现在银行转账的业务,加入A向B转账100元,此时A的账户中应该减少100元,B的账户中增加100元,但是如果在A转完账B还没有接受的时候,服务器出现 ...
- java中的锁——列队同步器
队列同步器 队列同步器(AbstractQueuedSynchronizer)为实现依赖于先进先出 (FIFO) 等待队列的阻塞锁和相关同步器(信号量.事件,等等)提供一个框架.此类的设计目标是成为依 ...
- codeigniter注意点
1. 数据的操作: insert 和update最好使用自带的db方法,1避免了过滤字符串和sql注入,2是数据量相对查询是非常小的. select则建议使用自己写的,这样便于优化. 2. 去掉ind ...