这是我的实际选择查询,
SELECT b.CaseNumber as CaseNumber,b.DebtorNr ,b.ActionDate,DATEADD(MONTH,-12,b.ActionDate) one_month,a.Registerdate --COALESCE(count(A.historynr),0) as DebtorActivity
from rr..r_basic_info b
join rr..activities_VW as A on b.DebtorNr=a.Debtornr
where
B.Debtornr = A.Debtornr
--and a.Registerdate<=b.ActionDate --this condition works
and a.registerdate >= DATEADD(month,-12,getdate()) --i have a problem with this condition and causing huge time consumption
我在这里定义的视图是activities_VW
select H.NR as historynr,o.debtornr as Debtornr, O.NR as ordernr, h.Actmenunr as Actmenunr,h.AGREEMENT as AgreementCode, h.Registerdate as Registerdate
来自abc..history h加入abc..orders o on o.NR = h.ORDERNR
我的执行计划就像
所有行的另外一个信息b.actionDate列的值与“2015-04-11 08:37:44.037”相同。
我已经检查了所有日期格式,但没有发现任何错误
对于另一种情况,我对b.actionDate列中的不同行有不同的值,并且它适用于该情况。
谢谢
答案 0 :(得分:0)
我的理解可能是错的,所以只能作为一种可能性 - 当在连接条件和/或where子句中使用函数时,为了确定数据是否符合条件,必须对照每一行检查桌子。
考虑您的第一部分WHERE e.DATE <= a.joining_date
- 您可以直接查看小于e.DATE
的行。
对于您的第二部分AND e.DATE >= DATEADD(MONTH, - 6, a.joining_date)
- 没有列是&#34;加入日期减去6个月&#34;,因此要确定e.Date
是否大于它,您需要对表中的a.joining_date
的每个实例执行该计算。
请记住where子句信息未被评估的顺序是在查询中写下来的 - 所以你认为被where
的第一部分消除的行是不一定被它消除。因此,正如其中一条评论建议的那样,使用DATEADD(MONTH, - 6, a.joining_date)
上的计算/持久列可能效果很好。
答案 1 :(得分:0)
这是我的实际选择查询,
SELECT b.CaseNumber as CaseNumber,b.DebtorNr ,b.ActionDate,DATEADD(MONTH,-12,b.ActionDate) one_month,a.Registerdate --COALESCE(count(A.historynr),0) as DebtorActivity
from rr..r_basic_info b
join rr..activities_VW as A on b.DebtorNr=a.Debtornr
where
B.Debtornr = A.Debtornr
--and a.Registerdate<=b.ActionDate --this condition works
and a.registerdate >= DATEADD(month,-12,getdate()) --i have a problem with this condition and causing huge time consumption
我在这里定义的视图是activities_VW
select H.NR as historynr,o.debtornr as Debtornr, O.NR as ordernr, h.Actmenunr as Actmenunr,h.AGREEMENT as AgreementCode, h.Registerdate as Registerdate
来自abc..history h加入abc..orders o on o.NR = h.ORDERNR
我的执行计划就像
所有行的另外一个信息b.actionDate列的值与“2015-04-11 08:37:44.037”相同。
我已经检查了所有日期格式,但没有发现任何错误
对于另一种情况,我对b.actionDate列中的不同行有不同的值,并且它适用于该情况。
谢谢