繁体   English   中英

在多个连接中使用 SQL 子查询的结果

[英]Using the result of a SQL subquery in multiple joins

我有一个子查询:-

SELECT TOP 1 Months.EndDate
FROM (SELECT TOP 1 *
      FROM FinancialMonth
      WHERE FinancialMonth.EndDate > DATEADD(MONTH, -12, GETDATE())
      AND FinancialMonth.StartDate < GETDATE()
      ORDER BY Period ASC) Months
ORDER BY Months.Period DESC

这将返回 Month End Date 并且只需更改第二个TOP 1即可在去年的任意几个月前工作。

我的问题是我需要在许多LEFT JOIN语句中使用这个日期,我将它与两个表进行比较。 我还需要在最终的SELECT SUM语句中返回它。

通过手动LEFT JOIN查询输入日期,我可以运行主查询并在 1 秒内返回结果。 但是,如果我将这个子查询放在每个LEFT JOIN它可能需要一分钟多的时间才能运行。 鉴于我想在过去 12 个月中的每一个月运行此查询,这会将服务器占用的时间长得无法接受。

有什么方法可以运行查询,然后在LEFT JOIN子查询中引用此结果,而不会一遍又一遍地运行。 目前它似乎运行超过 10 万次。

我已经不明白为什么您使用 2 x top 1(前 1 中的前 1 给出 1 行),您的查询可以简化为:

  SELECT TOP 1 EndDate
  FROM FinancialMonth
  WHERE FinancialMonth.EndDate > DATEADD(MONTH, -12, GETDATE())
  AND FinancialMonth.StartDate < GETDATE()
  ORDER BY Period ASC

现在对于你想要的,你可以做这样的事情:

with TblEndDate as (
SELECT TOP 1 EndDate
FROM FinancialMonth
WHERE FinancialMonth.EndDate > DATEADD(MONTH, -12, GETDATE())
AND FinancialMonth.StartDate < GETDATE()
ORDER BY Period ASC
)
select * from othertable f1 
left outer join TblEndDate  f2 on f1.DateInOthertable>=f2.EndDate

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM