码迷,mamicode.com
首页 > 数据库 > 详细

[数据库] 取指定表中某字段的累加和不超过总和80%的行

时间:2016-01-20 22:33:15      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:

有表 Table_1, 字段 Value int,  P float 。5

要取出以 Value 字段倒序的 P 字段累加和 不超过 整个表中P字段总和的 80%的行。  并在返回列表中 加入字段 SUM ,存放当前行与前面所有行的累加和。

 

技术分享

 

折腾了半天, 写了下面的查询sql:

declare @e float

select @e = sum(P) from [Table_1]
Set @e = @e * 0.8

;with T as (
        select [ID] = row_number() over(order by [Value] desc), [Value], [P],
            (select sum(P) from [Table_1] a where a.[Value] >= b.[Value]) SUM
        from [Table_1] b
)
select * from T where [SUM] <= @e

 

共生成了 1.1 万行测试数据, 测试用试 12 秒, 运行效果图和原数据如上图所示。

 

有人写出了百万行只要14秒的sql:

select CollectData as value,0.00000 as P,0.00000 as _P into #data
from (select top 1000000 * from EMS_HisData18) xx order by CollectData desc

declare @sum decimal(18,8)
declare @p decimal(18,8)=0.80

select @sum=sum(value) from #data

update #data set @p=@p-(value/@sum),_P=@p

select * from #data where _P>=0

drop table #data

 

[数据库] 取指定表中某字段的累加和不超过总和80%的行

标签:

原文地址:http://www.cnblogs.com/yangyxd/p/5146748.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!