跟大家分享一个提升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秒左右,就可以算出返回。看到速度的提升,我又积攒了一点智慧财富了。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值