sql – 日期当前和之前的累积列值
发布时间:2020-05-24 15:04:30 所属栏目:MsSql 来源:互联网
导读:我有一张注册表,大约有300K的记录.我需要一个SQL语句来显示该特定日期的注册总数? selectcount(x),CONVERT(varchar(12),date_created,111)from reg group bycONVERT(varchar(12),date_created,111)order byCONVERT(varchar(12),date_created,11
|
我有一张注册表,大约有300K的记录.我需要一个SQL语句来显示该特定日期的注册总数? select
count('x'),CONVERT(varchar(12),date_created,111)
from reg group by
cONVERT(varchar(12),111)
order by
CONVERT(varchar(12),111)
此查询的结果: 169 2011/03/24 3016 2011/03/25 2999 2011/03/26 期望的结果: 2011/03/25 3016+169 2011/03/26 2999+3016+169 如何才能做到这一点? 解决方法这是两个版本.我已经在一台速度非常慢的计算机上测试了超过6000天的100000行,内存不足,这表明cte版本比循环版本更快.这里建议的其他版本(到目前为止)要慢得多,前提是我已正确理解了问题.递归CTE(10秒) -- Table variable to hold count for each day
declare @DateCount table(d int,c int,rn int)
insert into @DateCount
select
datediff(d,date_created) as d,count(*) as c,row_number() over(order by datediff(d,date_created)) as rn
from reg
group by datediff(d,date_created)
-- Recursive cte using @DateCount to calculate the running sum
;with DateSum as
(
select
d,c,rn
from @DateCount
where rn = 1
union all
select
dc.d,ds.c+dc.c as c,dc.rn
from DateSum as ds
inner join @DateCount as dc
on ds.rn+1 = dc.rn
)
select
dateadd(d,d,0) as date_created,c as total_num
from DateSum
option (maxrecursion 0)
循环(14秒) -- Table variable to hold count for each day
declare @DateCount table(d int,rn int,cr int)
insert into @DateCount
select
datediff(d,date_created)) as rn,0
from reg
group by datediff(d,date_created)
declare @rn int = 1
-- Update cr with running sum
update dc set
cr = dc.c
from @DateCount as dc
where rn = @rn
while @@rowcount = 1
begin
set @rn = @rn + 1
update dc set
cr = dc.c + (select cr from @DateCount where rn = @rn - 1)
from @DateCount as dc
where rn = @rn
end
-- Get the result
select
dateadd(d,cr as total_num
from @DateCount
编辑1真正快速的版本 The quirky update -- Table variable to hold count for each day declare @DateCount table(d int primary key,date_created) declare @rt int = 0 declare @anchor int update @DateCount set @rt = cr = @rt + c,@anchor = d option (maxdop 1) -- Get the result select dateadd(d,cr as total_num from @DateCount order by d (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- SQL Server Sql语句与存储过程查询数据的性能测试实现代码
- 数据库原子一致性
- 设置SQL Azure规则“WINDOWS AZURE SERVICES”= YES是否意味
- 在Select中组合两个表(SQL Server 2008)
- SQL中exists的使用方法
- SQL Server代理作业:如何执行作业步骤而不执行整个作业
- sql – 验证两个不同表的两列完全匹配
- sql-server – Crystal Reports到MS SQL Server Reporting
- SQL Server Management Studio 2012 – 从/向表导出/导入数
- 数据库设计 – 为什么要在SQL文本列中存储分隔列表?
