【问题标题】:T-SQL Dynamic date range in WHERE clause (Last fiscal year + year to date)WHERE 子句中的 T-SQL 动态日期范围(上一个财政年度 + 年初至今)
【发布时间】:2016-07-20 04:59:44
【问题描述】:

我正在使用以下 WHERE 子句仅加载上一个会计年度加上一年至今的记录。

在没有WHERE clause 的情况下运行,100 万条记录需要 30 秒。使用 WHERE 子句,我不得不在 2 小时后停止它。

你能分享一下你的想法吗

WHERE 
    ([schema].[table].[DATE] >= DATEADD
        (yy, - 1, DATEADD
            (MONTH,(MONTH(GETDATE()) - 1) / 6 * 12 - 6,
             CAST(CAST(YEAR(GETDATE()) AS VARCHAR) AS DATETIME)
            )
        )
    )

【问题讨论】:

  • 将计算放入变量中并将日期与该变量进行比较。即declare @d datetime = DATEADD (yy, - 1, DATEADD (MONTH,(MONTH(GETDATE()) - 1) / 6 * 12 - 6, CAST(CAST(YEAR(GETDATE()) AS VARCHAR) AS DATETIME) ) ... WHERE ([schema].[table].[DATE] >= @d
  • 尽管这并没有解决我的问题,但我还是做出了改变。谢谢
  • “迄今为止的一年”是什么意思?这是截至当前日期的最后一个财政年度吗?因此,如果您的财年从 10 月 1 日开始,那就是 2014 年 10 月 1 日 - 今天?

标签: sql sql-server tsql sql-server-2012 where-clause


【解决方案1】:
Declare @PastFiscalYear Date

    Set @PastFiscalYear= DATEADD(yy, - 1, DATEADD(MONTH,(MONTH(GETDATE()) - 1) / 6 * 12 - 6,CAST(CAST(YEAR(GETDATE()) AS VARCHAR) AS DATETIME)))

    WHERE 
        ([schema].[table].[DATE] >= @PastFiscalYear )

你可以试试这个

【讨论】:

  • :格式化,突出显示代码并点击代码示例
  • 不幸的是,它并没有太大的不同。 (还是)感谢你的建议。我明天看看索引。
【解决方案2】:

这将带回自上一财政年度开始日期以来的数据。只需将 -3 更改为您的 FY 偏移量。 -3 代表 10 月。

[schema].[table].[DATE] >= DATEADD(mm,-3,DATEADD(YEAR, DATEDIFF(YEAR, 0, DATEADD(YEAR, -1, GETDATE())), 0))

【讨论】:

    猜你喜欢
    • 2018-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多