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取分组数据的最后一条数据的更多相关文章

  1. SQL分组排序后取每组最新一条数据的另一种思路

    在hibernate框架和mysql.oracle两种数据库兼容的项目中实现查询每个id最新更新的一条数据. 之前工作中一直用的mybatis+oracle数据库这种,一般写这类分组排序取每组最新一条 ...

  2. MySQL 分组后取每组前N条数据

    与oracle的 rownumber() over(partition by xxx  order by xxx )语句类似,即:对表分组后排序 创建测试emp表 1 2 3 4 5 6 7 8 9 ...

  3. oracle取order by的第一条数据

    SELECT * FROM (SELECT * FROM TABLE_NAME ORDER BY COL1) WHERE ROWNUM = 1; 备注: 1.不能给 (SELECT * FROM TA ...

  4. 怎么在一个list集合里面筛选重复的数据,在重复的数据中取最后添加的那条数据

    1.先将集合进行分组(分组字段)2.在判断分组的数量是否大于 03.大于0,则有重复的数据

  5. MS SQL 取分组后的几条数据

    SELECT uploaddate ,ptnumber ,instcount FROM ( SELECT ROW_NUMBER() OVER( PARTITION BY uploaddate ORDE ...

  6. 最短时间(几秒内)利用C#往SQLserver数据库一次性插入10万条数据

    用途说明: 公司要求做一个数据导入程序,要求将Excel数据,大批量的导入到数据库中,尽量少的访问数据库,高性能的对数据库进行存储.于是在网上进行查找,发现了一个比较好的解决方案,就是采用SqlBul ...

  7. 基于mysql实现group by取各分组最新一条数据

    准备数据 SQL语句 SELECT * FROM admin WHERE id IN ( SELECT MAX( id ) FROM admin GROUP BY order_id ); 查询结果:

  8. oracle取分组的前N条数据

    select * from(select animal,age,id, row_number()over(partition by animal order by age desc) row_num ...

  9. sqlserver 返回刚插入的那条数据

    insert into xxxxxx(Col_002,UrgentStatus,DoWorkShop,Col_004,Col_005,Col_006,Col_003,Col_007,postQQ,Co ...

随机推荐

  1. erp和crm的区别

    CRM(Customer Relationship Management)即客户关系管理.从字面上来看,是指企业用CRM来管理与客户之间的关系.在不同场合下,CRM可能是一个管理学术语,可能是一个软件 ...

  2. 之前工作过程中自定义的代码生成器模版,codesimit

    动软代码生成器 和codesmith 5年前的东西,或许有些过时 动软的功能有限,改的也比较简单,已弃. codesmith可定制性强,当时自已改的,提高了团队的整体工作效率. codesmith代码 ...

  3. relieved|auction|calculate|campaign|charge for |chartered

    ADJ-GRADED 感到宽慰的;感到安心的;宽心的If you are relieved, you feel happy because something unpleasant has not h ...

  4. 一次完整的HTTP请求响应过程(很详细)

    一. HTTP请求和响应步骤   图片来自:理解Http请求与响应 以上完整表示了HTTP请求和响应的7个步骤,下面从TCP/IP协议模型的角度来理解HTTP请求和响应如何传递的. 二.TCP/IP协 ...

  5. Spring-增强方式注解实现方式

    SpringAOP增强是什么,不知道的到上一章去找,这里直接上注解实现的代码(不是纯注解,纯注解后续会有) 创建业务类代码 @Service("dosome")//与配置文件中&l ...

  6. XiaoXiao

    最开始认识孙亚龙因为他是we的对手,反向大招的琴女,被冯卓君按在地上摩擦.凭借规则优势去了上海全明星,在红方下外塔和蓝方上二塔那两次q,是他的游戏巅峰.之后他退出了游戏没有再重连,不卖肉松饼是一个承诺 ...

  7. python中sort和sorted排序的相关方法

    Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列. 1)排序基础 简单的升序排序是非常容易的.只需要调用sorte ...

  8. Mysql主从同步原理简介

    1.定义:当master(主)库的数据发生变化的时候,变化会实时的同步到slave(从)库. 2.好处: 1)水平扩展数据库的负载能力. 2)容错,高可用.Failover(失败切换)/High Av ...

  9. byte的取值范围是-128~127,那么包含-128和127吗?

    本帖最后由 王德升老师 于 2019-12-27 17:56 编辑 byte的取值范围为什么是-128~127?如果面试官问你取值范围包含127吗?1. 首先我们知道Java中byte类型是1个字节占 ...

  10. JVM类文件结构

    作为一名Java后台开发的程序员, 深入理解JVM, 重要性不言而喻, 这篇文章主要是记录JVM类文件结构相关知识. 2. 实例 这部分比较抽象, 所以以实例的形式来学习. 这部分作为资料, 以便后面 ...