什么是最好的SQL有效日期设计模式



我有,我想象的是一个标准的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。

我建议横向连接。这是一个强大的功能,似乎非常适合您的用例:

select t.*, er.*
from timecard
outer apply (
select top (1) *
from employee_rate er
where er.employee = t.employee and er.effective_date <= t.timecard_date
order by er.effective_date desc
) er

为了提高性能,请考虑在employee_rate(employee, effective_date)上建立索引。

最新更新