首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >WHERE或HAVING for Date Aggregation

WHERE或HAVING for Date Aggregation
EN

Stack Overflow用户
提问于 2018-06-07 23:28:19
回答 1查看 46关注 0票数 1

我们的SQL Server数据库有一个用于财务期的字符串"2018001“,我使用以下命令将其转换为扁平化日期:

代码语言:javascript
复制
CONVERT(DATE, CONCAT(LEFT(FP_Based_on_Comm_Date, 4), '-', RIGHT(FP_Based_on_Comm_Date, 2), '-', '1'), 102) AS FP_DATE,

为了按日期汇总销售额并筛选日期,>= '2015-01-01'最好使用:

代码语言:javascript
复制
CONVERT(DATE, CONCAT(LEFT(FP_Based_on_Comm_Date, 4), '-', RIGHT(FP_Based_on_Comm_Date, 2), '-', '1'), 102) >= '2015-01-01'

HAVINGWHERE子句中?

例如:

代码语言:javascript
复制
SELECT 
    SUM(Net_Value),
    CONVERT(DATE, CONCAT(LEFT(FP_Based_on_Comm_Date, 4), '-', RIGHT(FP_Based_on_Comm_Date, 2), '-', '1'), 102) AS FP_DATE
FROM
    DB123
WHERE  
    CONVERT(DATE, CONCAT(LEFT(FP_Based_on_Comm_Date, 4), '-', RIGHT(FP_Based_on_Comm_Date, 2), '-', '1'), 102) >= '2015-01-01'
GROUP BY 
    CONVERT(DATE, CONCAT(LEFT(FP_Based_on_Comm_Date, 4), '-', RIGHT(FP_Based_on_Comm_Date, 2), '-', '1'), 102)            
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-07 23:30:44

如果可以过滤where子句中的条件,通常会更好。

在聚合之前进行过滤通常意味着聚合的行数更少--因此性能更好。

在某些(相当罕见的)情况下,where子句中的过滤可能会阻止索引的使用或最佳统计信息的生成,从而导致更糟糕的查询计划。我相信这是相当罕见的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50745049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档