【问题标题】:SSRS and ignored "having" clauseSSRS 和忽略的“有”子句
【发布时间】:2017-07-05 08:27:03
【问题描述】:

我正在尝试获取上次更新日期早于当前日期减去 x 个月的数据列表。

例如,这里是一个示例表:

|  DataGUID  |  UpdateDate   |
|------------|---------------|
|    AAA     |   12-05-2017  |
|    BBB     |   22-06-2017  |
|    AAA     |   14-02-2017  |
|    BBB     |   16-05-2017  |

目前,我有一个类似于以下的 SQL 请求:

SELECT
      DataGUID,
      MAX(UpdateDate)
FROM
      Table
GROUP BY
      DataGUID
HAVING
      MAX(UpdateDate) <= DATEADD(mm, CAST('-'+@LastUpdatedXMonthAgo AS INT), GETDATE())
ORDER BY
      MAX(UpdateDate) DESC;

预期结果如下(@LastUpdatedXMonthAgo = 1,当前日期为 13-07-2017):

|  DataGUID  |  UpdateDate   |
|------------|---------------|
|    AAA     |   12-05-2017  |

它适用于 SSMS,但 SSRS 似乎忽略了“有”子句,并给了我这个结果:

|  DataGUID  |  UpdateDate   |
|------------|---------------|
|    BBB     |   22-06-2017  |
|    AAA     |   12-05-2017  |

似乎 SSRS 只是忽略了“have”子句,有没有办法让它在不使用 SSRS 过滤器的情况下工作?

【问题讨论】:

    标签: sql-server tsql reporting-services


    【解决方案1】:

    问题似乎是您试图将连字符连接到作为数字的会话变量之前。这导致减号被忽略/删除。因此,您的 HAVING 子句 有效,但它将每个最大日期与从现在开始的未来一个月进行比较,而不是落后一个月。

    以下查询将向您展示解决此问题的一种方法:

    DECLARE @LastUpdatedXMonthAgo INT;
    SET @LastUpdatedXMonthAgo = 1;
    SELECT
        DATEADD(mm, CAST('-'+CAST(@LastUpdatedXMonthAgo AS VARCHAR(55)) AS INT), GETDATE());
    

    这种方法是将@LastUpdatedXMonthAgo 转换为文本 尝试“否定”字符串。另一种方法是只制作 @LastUpdatedXMonthAgo 文本,但这可能对脚本的其余部分不方便。

    更新:

    在 SSMS 中,我们可以进一步简化为:

    DATEADD(mm, -@LastUpdatedXMonthAgo, GETDATE());
    

    演示在这里:

    Rextester

    【讨论】:

    • 我已经制作了@LastUpdatedXMonthAgo 文本,它成功了,谢谢。
    • 我认为可以通过在强制转换之前加上减号来更简单地编写,例如:DATEADD(mm, - CAST(LastUpdatedXMonthAgo AS INT), GETDATE()) 如果 LastUpdatedXMonthAgo 是 int 则可以这样写: DATEADD(mm, - LastUpdatedXMonthAgo , GETDATE())
    • @niktrs 其实可以写成even more simply than that.
    • @Dremor 是的,it does work,看看这个演示。
    • 可能在 SSMS 中,但在 SSRS 中,不幸的是。
    猜你喜欢
    • 1970-01-01
    • 2021-07-03
    • 1970-01-01
    • 2015-01-31
    • 1970-01-01
    • 1970-01-01
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多