gpt4 book ai didi

sql - 如何使用 sum(y) 和不同的表优化 select x 除以子查询的 SQL?

转载 作者:行者123 更新时间:2023-12-01 09:36:34 26 4
gpt4 key购买 nike

我在 T-SQL 2008 中有这个查询:

SELECT a.Amount / (
SELECT SUM(b.Amount) FROM Revenue b
WHERE YEAR(b.RevenueDate) = YEAR(a.ExpenseDate)
AND MONTH(b.RevenueDate) = MONTH(a.ExpenseDate)
AND b.HotelKey = a.HotelKey
)
FROM Expense a

问题是完成查询需要很长时间。我认为这是由对表 Expense 中的每一行执行的子查询“SELECT SUM(b.Amount) FROM Revenue b...”引起的。

如何优化这种查询?查询有没有更好的替代方案?

编辑:很抱歉,我忘记了子查询中的“AND b.HotelKey = a.HotelKey”子句。上述原始查询已更新。

@damien:

这是您使用 HotelKey join 添加的查询:

SELECT
a.Amount / b.Amount
FROM
Expense a
inner join
(SELECT
HotelKey,
DATEADD(month,DATEDIFF(month,0,RevenueDate),0) as MonthStart,
DATEADD(month,1+DATEDIFF(month,0,RevenueDate),0) as MonthEnd,
SUM(Amount) as Amount
FROM
Revenue
GROUP BY
HotelKey,
DATEADD(month,DATEDIFF(month,0,RevenueDate),0),
DATEADD(month,1+DATEDIFF(month,0,RevenueDate),0)
) b
ON
a.ExpenseDate >= b.MonthStart and
a.ExpenseDate < b.MonthEnd
and a.HotelKey = b.HotelKey

最佳答案

尝试将内部查询中的 where 子句更改为:

where b.RevenueDate >= dateadd(month, datediff(month, 0, a.ExpenseDate), 0) and
b.RevenueDate < dateadd(month, 1+datediff(month, 0, a.ExpenseDate), 0)

它会让查询有机会使用 Revenue.RevenueDate 上的索引(如果有的话)。

关于sql - 如何使用 sum(y) 和不同的表优化 select x 除以子查询的 SQL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6689517/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com