【发布时间】:2019-07-10 12:19:22
【问题描述】:
我需要 SQL 来确定在上个月开立或关闭帐户的所有客户的正确平均值。这个计算是一个大得多的每月提取的一部分。此外,我需要输出不改变上个月未打开或关闭的所有预先存在的帐户的平均余额(通过案例陈述??不确定)。
目前,我们的系统通过对账户关闭或打开当天的平均余额进行快照来计算月末平均值。但这是不精确的,因为当一个帐户可能只开放一天或一个月内的 15 天(等)时,它会分配整月的“信用”。
基本数学告诉我,我需要计算平均值:
average_balance * days_open_in_month_closed/days_in_month (for closed accounts)
average_balance * days_open_in_month_new/days_in_month (for new accounts)
我在较大的查询中编写了 3 个子查询来获取所有日期/日期组件的数据;但是我遇到了我的 SQL 知识的界限。本质上,我不确定如何将所有内容组合在一起:我不知道如何插入平均计算,如何使所有内容都适合单个子查询(如果可以/应该)等等。
,(SELECT DAY(DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,0, GETDATE()), 0)))) AS days_in)month
,(SELECT DATEDIFF(DAY,DATEADD(month, DATEDIFF(month, -1, getdate()) -2, 0),closed_date) AS days_opened_in_month_closed
,(SELECT DATEDIFF(DAY,DATEADD(month, DATEDIFF(month, -1, getdate()) -2,0,),open_date) AS days_open_in_month_new
对于系统生成的平均余额为 1,800,000 美元、在 30 天的日历月中关闭 11 天的帐户,我预计 SQL 计算的平均值为 660,000 美元。
同样,对于一个系统生成的平均余额为 750,000 美元且在 30 天日历月结束前 2 天开设的帐户,我预计 SQL 计算的平均值为 45,000,000 美元。
我希望 SQL 不会改变系统生成的平均 500,000 的帐户,该帐户已打开整整 30 天的月份。
提前致谢。
【问题讨论】:
-
你使用的是
MySQL还是SQL Server? -
SQL 服务器。感谢您对标签的提醒 - mysql 被意外标记了。
标签: sql sql-server-2008