我正在尝试查看是否有优化底层 T-SQL 代码的方法。
以前的同事是这样写的,我不确定是否有更好的写法,因为它在 Where 子句(子查询?)中有 Select...。
select
Employee_Number,
DateLoad
from dbo.table1 as a
where DateLoad =
(select min(DateLoad) from dbo.table2 as b
where a.Employee_Number = b.Employee_Number)
这仍然使用嵌套的 SELECT,但不在 WHERE 子句中并且应该运行得更快:
SELECT Employee_Number, DateLoad
FROM (
select a.Employee_number, a.DateLoad
, row_number() over (partition by a.Employee_Number
order by b.DateLoad) rn
from Table1 A
inner join Table2 B on B.Employee_Number = A.Employee_Number
and a.DateLoad = b.DateLoad
) t
WHERE rn = 1
根据数据的不同,可能还有一种方法可以使用 GROUP BY 来做到这一点,而无需任何嵌套:
SELECT A.Employee_Number, Min(B.DateLoad) DateLoad
FROM Table1 A
INNER JOIN Table2 B ON B.Employee_Number = A.Employee_Number
AND a.DateLoad = b.DateLoad
GROUP BY A.Employee_Number
但我不能 100% 确定这在功能上等同于原始版本。