将月费率除以日记录在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()和会计闰年的查询的主要内容,如果未能解决你的问题,请参考以下文章