【发布时间】:2017-04-05 21:34:39
【问题描述】:
下面的 SQL 查询有效,但由于使用了子查询,它需要很长时间才能响应。我希望有人能为我找到优化此查询的方法。
SELECT a.Userid, a.Date, a.[Total Hrs], a.[Load Date],
c.[First Name], c.[Last Name]
FROM dbo.TimeSheetReport AS a
INNER JOIN
Candidates AS c ON a.Userid = c.Userid
AND a.Date >= c.[Confirmed Start Date]
AND (a.Date <= c.[Planned End Date] or c.[Planned End Date] is null)
WHERE a.[Load Date] = @ddlendDate
AND a.Date not in
(select b.Date from dbo.TimeSheetReport AS b
where b.[Load Date] = @ddlstartDate and a.Userid = b.Userid)
AND a.Date < (select MAX(date) from dbo.TimeSheetReport AS c
where c.[Load Date] = @ddlstartDate)
每个数据子集都是根据数据的加载时间(即加载日期)创建的。它从当前加载 (@ddlendDate) 中查找之前加载 (@ddlstartDate) 中缺少的任何日期。
我尝试在其自身上使用 LEFT OUTER JOIN,但返回的记录为零,我知道它们存在。
有什么想法吗?
【问题讨论】:
标签: sql sql-server-2008 stored-procedures