【问题标题】:Dividing Monthly rates to daily records In SQL Server query based on getdate () and accounting for leap years将月费率除以日记录在SQL Server中基于getdate()和会计闰年的查询
【发布时间】: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
  • 如果计数功能在下面的查询中存在问题,则可以将其删除

标签: sql sql-server sql-server-2014


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 2014-06-18
    • 1970-01-01
    相关资源
    最近更新 更多