将月费率除以日记录在SQL Server中基于getdate()和会计闰年的查询

Posted

技术标签:

【中文标题】将月费率除以日记录在SQL Server中基于getdate()和会计闰年的查询【英文标题】:Dividing Monthly rates to daily records In SQL Server query based on getdate () and accounting for leap years 【发布时间】:2020-08-24 20:13:04 【问题描述】:

我有一个问题:

insert into metrics_rpt
select @start_date, 'PLANNED RATES', sum(qty)
from rates_detail detail 
where detail.id = 1
and detail.year = datepart(yy, @start_date)
and detail.month = datepart (mm, @start_date)
and detail.group_id in (9, 13)

此查询检索费率总和,而不是检索总和..

我想在我的 metrics_rpt 表中插入一个每日值 将根据一年中的任何一个月和闰年给出费率的每日值 占了。

任何帮助将不胜感激!

【问题讨论】:

样本数据和期望的结果会有所帮助。 给定名称“detail_id”,那是您表的 PK 吗?如果是这样,您正在检索单行,并且您的总和逻辑上没有加法。也许您应该从查询中删除该(第一个)条件?为了子孙后代,输入“month”而不是“mm”真的需要更多的工作吗(“yy”也是如此)?不要养成懒惰的习惯。 id是rates_detail表中的一列,我不相信是pk 如果计数功能在下面的查询中存在问题,则可以将其删除 【参考方案1】:

为了预测未来的天数,这个查询使用了一个计数表,描述为here。给定任何开始日期,它将 @sum_qty 按天拆分为当月。

查询

declare
  @start_date         date='2020-08-05',
  @sum_qty            int=60000;

select
  dateadd(d, f.N, dt_range.start_dt) daily_dt,
  cast(1/(d_diff.d_diff+1.0)*@sum_qty as decimal(10,2)) daily_qtr
from (select datefromparts(year(@start_date), month(@start_date), 1) start_dt,
             eomonth(@start_date) end_dt) dt_range
     cross apply
     (select datediff(d, dt_range.start_dt, eomonth(dt_range.end_dt)) d_diff) d_diff
     cross apply
     dbo.fnTally(0, d_diff.d_diff) f;

结果

daily_dt    daily_qtr
2020-08-01  1935.48
2020-08-02  1935.48
2020-08-03  1935.48
2020-08-04  1935.48
2020-08-05  1935.48
2020-08-06  1935.48
2020-08-07  1935.48
2020-08-08  1935.48
2020-08-09  1935.48
2020-08-10  1935.48
2020-08-11  1935.48
2020-08-12  1935.48
2020-08-13  1935.48
2020-08-14  1935.48
2020-08-15  1935.48
2020-08-16  1935.48
2020-08-17  1935.48
2020-08-18  1935.48
2020-08-19  1935.48
2020-08-20  1935.48
2020-08-21  1935.48
2020-08-22  1935.48
2020-08-23  1935.48
2020-08-24  1935.48
2020-08-25  1935.48
2020-08-26  1935.48
2020-08-27  1935.48
2020-08-28  1935.48
2020-08-29  1935.48
2020-08-30  1935.48
2020-08-31  1935.48

【讨论】:

以上是关于将月费率除以日记录在SQL Server中基于getdate()和会计闰年的查询的主要内容,如果未能解决你的问题,请参考以下文章

左连接的替代方案

Sql server除以零问题[关闭]

数据库大师成长日记:巧用SQL语句查看SQL Server的结构信息

SQL SERVER 运维日记-数据库备份

SQL SERVER 工作日记--删除执行计划

数据库大师成长日记:SQL Server如何防止开发人员获取敏感数据