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. Excel-DNA自定义函数的参数智能提示功能:ExcelDna.IntelliSense1.1.0.rar

    解压缩后,可以看到如下3个文件. ExcelDna.IntelliSense.xll 以及 ExcelDna.IntelliSense64.xll 是两个函数参数智能提示加载项,分别用于32和64位E ...

  2. git理论知识

    1.Git 有三种状态,你的文件可能处于其中之一:已提交(committed).已修改(modified)和已暂存(staged) 由此引入 Git 项目的三个工作区域的概念:Git 仓库.工作目录以 ...

  3. 高可用性的mongo集群搭建

    mongoDB安装 参照:https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/ 配置yum管理包 在路径/etc/y ...

  4. 如何在Windows服务器上新建一个Powershell.ps1的定时任务

    背景: 有一些一次性的Powershell脚本,需要我们每次都手动执行一下,为了简化工作,现在我们可以使用Windows自带的计划任务,进行定时执行. 该教程是在Windows Server 2012 ...

  5. asp.net 获取日期

    //获取日期+时间 DateTime.Now.ToString(); // 2008-9-4 20:02:10 DateTime.Now.ToLocalTime().ToString(); // 20 ...

  6. python项目中对mysql数据库进行配置,并进行连接测试

    在settings.py中配置mysql数据库进行相关配置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME ...

  7. Critical-Value|Critical-Value Approach to Hypothesis Testing

    9.2 Critical-Value Approach to Hypothesis Testing example: 对于mean 值 275 的假设: 有一个关于sample mean的distri ...

  8. 关于RFC

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/byxdaz/article/details/557902关于RFC(Request For Comm ...

  9. 用户增删改查 django生命周期 数据库操作

    一 django生命周期 1 浏览器输入一个请求(get/post)2 响应到django程序中3 执行到url,url通过请求的地址匹配到不同的视图函数4 执行对应的视图函数,此过程可以查询数据库, ...

  10. 吴裕雄--天生自然python学习笔记:案例:用正则表达式查找邮件账号

    抓取万水书苑“ ht甲://www.w sbookshow.com/ ”网站中的所有 E-mai l 账号. import requests,re regex = re.compile('[a-zA- ...