【问题标题】:Trouble accumulating data from specific time interval last year无法从去年的特定时间间隔累积数据
【发布时间】:2015-06-12 16:55:38
【问题描述】:

我正在尝试从 SQL 查询中累积金额。输入 @STARTDATE@ENDDATE 是日期时间类型 (YYYYMMDD)。
因此,Case 语句会检查验证日期是否在特定日期之间。

对Case语句的一些解释: 工作正常:
CURRENT_YEAR_ACC,从年初到@ENDDATE累计当前年份的验证量

CURRENT_YEAR_MONTHS,@STARTDATE 和@ENDDATE 之间的累计金额。

PREVIOUS_YEAR_MONTH,过去几年在@STARTDATE -1 年和@ENDDATE -1 年之间的累积金额。

不起作用:

PREVIOUS_YEAR_ACC,应该计算去年初(20XX-01-01)到@ENDDATE -1yr。

在这里我得到与 PREVIOUS_YEAR_MONTH 相同的值

   sum (RAW_DATA.CURRENT_YEAR_MONTH) as PERIOD_I_AR,
   sum (RAW_DATA.PREVIOUS_YEAR_MONTH) as PERIOD_FG_AR,
   sum (RAW_DATA.CURRENT_YEAR_ACC) as ACK_I_AR,
   sum (RAW_DATA.PREVIOUS_YEAR_ACC) as ACK_FG_AR
from (SELECT rehuv.[KD1] as VST_nr, rekod.BEN as VST_ben,
   rehuv.KONTO as Konto_nr, rektk.KONTO_BEN as Konto_ben,
   lresk.LEV_NR as LEV_nr, rehuv.TEXT as LEV_ben, rehuv.VER_DATUM
   as DATUM, case when rehuv.VER_DATUM > = dateadd (month,
   - datepart (month, @STARTDATE) + 1, @STARTDATE)
   and rehuv.VER_DATUM < = @ENDDATE then rehuv.BELOPP else 0 end
   as CURRENT_YEAR_ACC,
   case when rehuv.VER_DATUM > = dateadd (YEAR, - 1, dateadd (MONTH, - datepart (MONTH, @STARTDATE) + 1, @STARTDATE)) and rehuv.VER_DATUM < = DATEADD (year, - 1, @ENDDATE) 
then rehuv.BELOPP else 0 end as PREVIOUS_YEAR_ACC,
   case when rehuv.VER_DATUM > = @STARTDATE
   and rehuv.VER_DATUM < = @ENDDATE then rehuv.BELOPP else 0 end
   as CURRENT_YEAR_MONTH,
   case when rehuv.VER_DATUM > = DATEADD (year, - 1, @STARTDATE)
   and rehuv.VER_DATUM < = DATEADD (year, - 1,
   @ENDDATE) then rehuv.BELOPP else 0 end
   as PREVIOUS_YEAR_MONTH FROM [FTG0001].[dbo].[REHUV]

【问题讨论】:

  • 有没有机会创建一个MCVE
  • @Amit 更新了代码
  • 不幸的是,这不是 MCVE。这是一个不完整的片段。 MCVE 是一个最小的、COMPLETE、可验证的例子。这个片段让人很难理解。

标签: sql sql-server tsql


【解决方案1】:

我建议遵循 KISS 原则(保持简单)。

在我看来,最好的方法是创建子查询,每个时间段一个 - 在此期间过滤。对这些值求和并使用内部连接将它们连接在一起并提取所需的列(求和列)。很多情况会减慢它的速度。

也许您需要在日期列上建立索引以进一步提高性能。但这需要在您的环境中进行测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-01
    • 1970-01-01
    • 2020-07-28
    • 2018-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多