【问题标题】:Trying to optimize this T-SQL query试图优化这个 T-SQL 查询
【发布时间】:2022-07-01 01:19:02
【问题描述】:

我正在尝试优化这个 T-SQL 查询。

我不确定如何将所有其余的查询从“哪里 DateLoad....”开始修改为。

看来我可以让它变得更简单,但我不确定如何。

select Employee_Number, 
       DateLoad, 
       min(Rate_1_Pay_Rate) as Rate_1_Pay_Rate,
       min(Hourly_Rate) as Hourly_Rate, 
       min(FLSA_Status) as FLSA_Status,  
       min(Hire_Date) as Hire_Date, 
       min(Employee_Type) as Employee_Type,
       min(Status_Type) as Status_Type
from dbo.TableMain as hist
where DateLoad = (select min(DateLoad)
                  from dbo.TableMain as hist2 
                  where hist.Employee_Number = hist2.Employee_Number)
  and Employee_Type = (select min(Employee_Type)
                       from dbo.TableMain as hist2 
                       where hist.Employee_Number = hist2.Employee_Number)
  and Status_Type = (select min(Status_Type)
                     from dbo.TableMain as hist2 
                     where hist.Employee_Number = hist2.Employee_Number)
  and Hire_Date = (select min(Hire_Date) 
                   from dbo.TableMain as hist2 
                   where hist.Employee_Number = hist2.Employee_Number) 
group by Employee_Number, DateLoad

【问题讨论】:

  • 这个查询的目标是什么?您引用表格TableMain 5 次,我怀疑您需要多次引用它。

标签: sql-server tsql query-optimization


【解决方案1】:

一种选择是一次计算所有子查询聚合,然后加入主表。

WITH cte AS (
    SELECT MIN(DateLoad)      AS DateLoad,
           MIN(Employee_Type) AS Employee_Type,
           MIN(Status_Type)   AS Status_Type,
           MIN(Hire_Date)     AS min(Hire_Date)
    FROM dbo.TableMain 
)
SELECT Employee_Number, 
       DateLoad, 

       MIN(Rate_1_Pay_Rate) AS Rate_1_Pay_Rate,
       MIN(Hourly_Rate)     AS Hourly_Rate, 
       MIN(FLSA_Status)   AS FLSA_Status,
       
       MIN(Hire_Date) as Hire_Date, 
       MIN(Employee_Type) as Employee_Type,
       MIN(Status_Type) as Status_Type
FROM       dbo.TableMain hist
INNER JOIN cte
        ON hist.DateLoad      = cte.DateLoad
       AND hist.Employee_Type = cte.Employee_Type
       AND hist.Status_Type   = cte.Status_Type
       AND hist.Hire_Date     = cte.Hire_Date
GROUP BY Employee_Number, 
         DateLoad

【讨论】:

    猜你喜欢
    • 2013-05-27
    • 1970-01-01
    • 1970-01-01
    • 2014-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多