【问题标题】:Values over a time period一段时间内的值
【发布时间】:2013-08-06 14:41:42
【问题描述】:

我想在 SQL 中计算一个执行以下操作的值:

如果用户输入的月份参数(我正在编写 SQL 以先聚合信息,然后使用 SSRS)是今天过去 90 天或更长时间(或最近的数据输入),则使用该月份的值。否则,如果月份参数在报表运行日期(或最近的数据输入)的 90 天内,则使用实际上是过去 90 天的最新值。例如,如果我在八月运行报告并将月份参数指定为八月,我将需要五月的值。如果我将月份参数指定为四月,我想要四月的值,因为从那时起 90 天已经过去了。抱歉,如果这不简洁。我只是想要一些方向。

干杯。

【问题讨论】:

  • 月份参数是整数、日期/时间还是其他?
  • 我认为您应该创建一个名为@StartDate 的日期变量。然后根据输入的月份参数为其分配一个值,并在您的选择查询中使用它。
  • 伊恩,月份参数是当前的日期/时间。丹,你的意思是像 make @startDate 表示从输入参数开始的 90 天的时间?
  • 我的意思是@StartDate应该根据你描述的业务规则设置为适当的值。

标签: sql date reporting-services parameters


【解决方案1】:

正如@DanBracuk 在 cmets 中所建议的那样,您可能应该从 SSRS 获取参数,然后根据 T-SQL 代码中的当前日期对其进行更新。

假设您有一个 SSRS 参数 Parameters!Month.Value,它作为 @Month 传递给您的存储过程。

您可以根据需要使用GETDATE()DATEDIFF()DATEADD() 等日期函数来调整@Month,例如在存储过程代码中类似于:

select @Month = case when datediff(dd, @Month, getdate()) > 90
  then @Month
  else dateadd(dd, -90, @Month)
  end

select *
from MyTable
where MyDate < @Month

更新第一个语句以满足您的要求;在这一点上他们似乎有点模棱两可 - 如果我没有完全理解这个问题,请道歉。

【讨论】:

  • 别担心,我知道我有点含糊——我实际上正在做类似于使用 dateadd() 的事情。再次感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2021-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-09
  • 2021-11-20
相关资源
最近更新 更多