跟大家分享一个提升SQL语句的心得—快速算出是否属于最新单价

    在我做的ERP专案中,有一个最新单价明细的功能,即是从单价资料中,算出是否属于最新单价。

    规则:料号(ItemID)+客户(CustID)唯一&&生效日期(BeginDate)<=当天&&生效日期最大&&且最后维护的那一行(SPriceID是自动增量字段)记录。即是属于最新单价。

原来的写法:

Select A.ItemID,A.CustID,Max(A.SPriceID) as SPriceID From SalseItemPrice A Inner join (

select ItemID,CustID,Max(Convert(Nvarchar,BeginDate,111)) as BeginDate From SalseItemPrice Where Isdel=0 and IsPass<5 and Convert(Nvarchar,BeginDate,111)<=Convert(Nvarchar,GetDate(),111) Group  by ItemID,CustID) B

On A.ItemID=B.ItemID and A.CustID=B.CustID and convert(Nvarchar,A.BeginDate,111)=Convert(Nvarchar,B.BeginDate,111) Where A.Isdel=0 and A.IsPass<5 Group By A.ItemID,A.CustID

    在加载50000行记录时,需要5分钟左右,才能算出返回。

    经研究后,改成以下写法:

SELECT ItemID,CustID,MAX(convert(bigint,BeginDate,112)*1000000000+SPriceID)AS MaxID

FROM SalseItemPrice WHERE IsDel=0 AND IsPass<5 AND BeginDate<= GETDATE() Group By ItemID,CustID

    在加载50000行记录时,需要3-4秒左右,就可以算出返回。看到速度的提升,我又积攒了一点智慧财富了。

    如果您还有更优的方案,欢迎回复。如蒙不吝赐教,小弟不胜感激!

你可能感兴趣的:(跟大家分享一个提升SQL语句的心得—快速算出是否属于最新单价)