求计算月日均的SQL语句,并结果保存到另外表中

yuhouqingchen2020 2015-10-29 04:55:09
账号 存取日期 发生额 余额
A 2015-10-6 100000 100000
A 2015-10-15 -50000 50000
B 2015-10-3 20000 20000
B 2015-10-21 40000 60000

A 2015-11-6 180000 230000
A 2015-11-15 -100000 130000
B 2015-11-3 20000 80000
B 2015-11-22 40000 120000


想要的结果并保存到temp_ck表中
账号 日均 月日均
A 2015-10 56451.61
B 2015-10 ....
A 2015-11 146666.67
B 2015-11 ....


计算公式:
A账号10月份日均为=(6号-1号)*余额(0)+(15号-6号)*余额(100000)+(31号-15号+1)*余额(50000)/31=56451.61
A账号11月份日均为=(6号-1号)*余额(50000)+(15号-6号)*余额(230000)+(30号-15号+1)*余额(130000)/30=146666.67
...全文
655 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuhouqingchen2020 2015-10-30
  • 打赏
  • 举报
回复
感谢高手yangb0803 ,只是我想要的结果错了,是按月统计的,只显示上月日均,每个月统计上一个月的日均,比如11月份统计10月月发日均 A 2015-10 56451.61 B 2015-10 .... 12月份统计11月份的日均 A 2015-11 146666.67 B 2015-11 .... 高手怎么改?
道玄希言 2015-10-29
  • 打赏
  • 举报
回复
SQL 2005 或以上版本适用。

;WITH table1(账号, 存取日期, 发生额, 余额) as
(
    select 'A','2015-10-06',100000.00,	100000.00 union all
    select 'A','2015-10-15',-50000.00,	50000.00 union all	
    select 'B','2015-10-03',20000.00,	20000.00 union all
    select 'B','2015-10-21',40000.00,	60000.00 union all
    select 'A','2015-11-06',180000.00,	230000.00 union all
    select 'A','2015-11-15',-100000.00,130000.00 union all	
    select 'B','2015-11-03',20000.00,	80000.00 union all
    select 'B','2015-11-22',40000.00,	120000.00
)
, b AS (
    SELECT DISTINCT 账号
      FROM table1
)
,c AS ( -- 日历
        SELECT convert(nvarchar(10),DateAdd(day,number,'2015-10-01'), 120) 日期
          FROM master..spt_values
         WHERE type = 'p'
           AND number < 61
) 
,d AS (
        SELECT b.账号,
               c.日期
          FROM b
          JOIN c 
            ON 1=1
)
,e AS
(
  select d.账号, d.日期, isnull(f.余额, 0) as 余额 from d 
   OUTER APPLY (
                    SELECT TOP 1 *
                      FROM table1 t
                     WHERE t.账号 = d.账号
                       AND t.存取日期 <= d.日期
                  ORDER BY t.存取日期 DESC
               ) f
)

SELECT  
    账号, MONTH(日期) 月份,
    convert(decimal(18,2),AVG(余额)) as 日均余额
FROM e
GROUP BY MONTH(日期), 账号
PS: 你不是已经有过类似的发帖么。。。 http://bbs.csdn.net/topics/391846027 跟这帖应该差不多吧。

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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