我正在编写一个sql查询来从不同的表中获取数据,但它从非常慢的表中获取数据。 大约2分钟以上完成。 我在做什么在这里: 1.我得到数据差异,并代表日期差异,我得到帐号 我正在比较表格以获得我需要的确切数据。
这是我的查询
select T.accountno,
MAX(T.datetxn) as MxDt,
datediff(MM,MAX(T.datetxn), '2011-6-30') as Diffs,
max(P.Name) as POName
from Account_skd A,
AccountTxn_skd T,
POName P
where A.AccountNo = T.AccountNo and
GPOCode = A.OfficeCode and
Code = A.POCode and
A.servicecode = T.ServiceCode
group by T.AccountNo
order by len(T.AccountNo) DESC
请帮助我如何使用连接或任何其他方式在5-10秒内在非常短的时间内获取数据。
答案 0 :(得分:0)
由于看起来你收到了每个帐户,并且性能很慢,我会尝试通过帐户创建一个预查询,然后单独加入其他连接表,例如..
select
T.Accountno,
T.MxDt,
datediff(MM, T.MxDt, '2011-6-30') as Diffs,
P.Name as POName
from
( select T1.AccountNo,
Max( T1.DateTxn ) MxDt
from AccontTxn_skd T1
group by T1.AccountNo ) T
JOIN Account_skd A
on T.AccountNo = A.AccountNo
JOIN POName P
on A.POCode = P.Code <-- GUESSING as you didn't qualify alias.field
AND A.OfficeCode = P.GPOCode <-- in your query for these two fields
order by
len(T.AccountNo) DESC
您有其他基于T.ServiceCode匹配的元素,但由于您只是对帐号进行分组,是否重要使用了哪些服务代码?否则,您需要按帐户和服务代码进行分组(我将服务代码添加到预先查询中,并将其作为连接条件添加到帐户表中)。