【发布时间】:2020-08-28 23:18:38
【问题描述】:
我有,我想象的是标准的 SQL 设计模式。我有两个要加入的表。一个有一个日期,另一个有一个生效日期,我想要第二个表的最后一条记录,其生效日期小于或等于第一个表的日期。
我现在使用的查询类似于:
SELECT *
FROM Timecard
LEFT JOIN Employee_Rate on Timecard.Employee=Employee_Rate.Employee
AND Employee_Rate.Effective_Date =
(
SELECT MAX(Effective_Date)
FROM Employee_Rate rate2
WHERE Employee_Rate.Employee=rate2.Employee
AND rate2.Effective_Date <=Timecard.Timecard_Date
)
这很好用,我这样做已经有一段时间了。但我想知道是否有更有效的方法来做到这一点。我正在尝试提高几个非常复杂的查询的性能。
我正在使用 SQL Server。
【问题讨论】:
-
这能回答你的问题吗? Get top 1 row of each group
-
提示:实际执行计划通常是查询性能问题的起点。
标签: sql sql-server left-join greatest-n-per-group lateral-join