日期聚合的地点或日期

时间:2018-06-07 15:28:19

标签: sql sql-server

我们的SQL Server数据库在我们的会计期间有一个字符串“2018001”,我将其转换为展平日期:

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',最好使用:

CONVERT(DATE, CONCAT(LEFT(FP_Based_on_Comm_Date, 4), '-', RIGHT(FP_Based_on_Comm_Date, 2), '-', '1'), 102) >= '2015-01-01'

HAVINGWHERE子句?

e.g。

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)            

1 个答案:

答案 0 :(得分:3)

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

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

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