sql server 计算累计

Oliver5914 2018-01-25 05:55:02
sql server 计算数量累计
下面第一个图片是数据库直接查询出来的,第二个图片是希望得到的结果, 系统在查询的列种增加一列是 num字段的累计 ,按照时间排序



测试sql
create table temp_a
(
num int ,
createdate datetime
)

insert into temp_a
select -1,'2018-01-20 00:19:31.000'
union select -1,'2018-01-13 00:19:46.000'
union select -1,'2018-01-06 00:17:03.000'
union select 4,'2017-12-30 17:15:13.000'
union select -1,'2017-12-30 01:01:53.000'
union select 4,'2017-12-27 16:04:30.000'
union select -1,'2017-12-23 00:24:03.000'
union select -1,'2017-12-16 00:15:02.000'
union select 4,'2017-12-15 16:25:02.000'
union select 4,'2017-12-15 16:14:37.000'
union select 2,'2017-12-13 12:34:34.807'


select * from temp_a order by createdate desc
...全文
876 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2018-01-26
  • 打赏
  • 举报
回复
SQL2008可用 e.g.
SELECT *
     ,(SELECT SUM(num)  FROM temp_a WHERE createdate<=a.createdate)
FROM temp_a AS a
ORDER BY createdate DESC;
中国风 2018-01-26
  • 打赏
  • 举报
回复
或用CROSS APPLY e.g.
SELECT a.*
     , b.num2
FROM temp_a AS a
     CROSS APPLY
(SELECT SUM(num) FROM temp_a WHERE createdate<=a.createdate) AS b(num2)
ORDER BY createdate DESC;
五维思考 2018-01-26
  • 打赏
  • 举报
回复
SELECT SUM(num)OVER(ORDER BY createdate),* FROM temp_a ORDER BY createdate DESC
Oliver5914 2018-01-26
  • 打赏
  • 举报
回复
引用 5 楼 zjcxc 的回复:
[quote=引用 3 楼 a591402213 的回复:] [quote=引用 1 楼 zjcxc 的回复:] select *, SUM(num)OVER(ORDER BY createdate desc) from temp_a order by createdate desc
有语法错误[/quote] 如果你用的是 sql server,说明你的版本不够[/quote] 版本是2008 r2
zjcxc 2018-01-26
  • 打赏
  • 举报
回复
引用 3 楼 a591402213 的回复:
[quote=引用 1 楼 zjcxc 的回复:] select *, SUM(num)OVER(ORDER BY createdate desc) from temp_a order by createdate desc
有语法错误[/quote] 如果你用的是 sql server,说明你的版本不够
Oliver5914 2018-01-26
  • 打赏
  • 举报
回复
引用 2 楼 sinat_28984567 的回复:

SELECT  ( SELECT    SUM(num)
          FROM      temp_a b
          WHERE     b.createdate <= a.createdate
        ) ,
        a.*
FROM    temp_a a
ORDER BY a.createdate DESC
可以的,多谢
Oliver5914 2018-01-26
  • 打赏
  • 举报
回复
引用 1 楼 zjcxc 的回复:
select *, SUM(num)OVER(ORDER BY createdate desc) from temp_a order by createdate desc
有语法错误
二月十六 2018-01-25
  • 打赏
  • 举报
回复

SELECT ( SELECT SUM(num)
FROM temp_a b
WHERE b.createdate <= a.createdate
) ,
a.*
FROM temp_a a
ORDER BY a.createdate DESC


zjcxc 2018-01-25
  • 打赏
  • 举报
回复
select *, SUM(num)OVER(ORDER BY createdate desc) from temp_a order by createdate desc

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧