[英]How to Sum a result quantity in sql server with multiple records which several joins, does it need some subquery to do it?
[英]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.