/*第一种实现方法,效率低并且有错误*/ @DD @DD = GETDATE() a.GoodsID , a.Account , a.LastUpdate dbo.tb_App_Goods a dbo.tb_App_Goods b a.Account = b.Account a.LastUpdate > b.LastUpdate a.GoodsID , a.Account , a.LastUpdate (b.GoodsID) < 2 a.Account , a.LastUpdate ; DATEDIFF(MILLISECOND, @DD, GETDATE()) /*第二种实现方法,效率高并且准确*/ @DD = GETDATE() a.GoodsID , a.Account , a.LastUpdate dbo.tb_App_Goods a ( ROW_NUMBER() ( PARTITION Account LastUpdate ) C , * dbo.tb_App_Goods ) b a.GoodsID = b.GoodsID ( b.C 1 2 ) a.Account , a.LastUpdate ; DATEDIFF(MILLISECOND, @DD, GETDATE())
执行结果:
明显第二种方法效率最高:
不仅仅是效率高,仔细看,查询结果不一样,第一种方法结果比第二种方法查询出来的多:
原因:
第一种方法什么鬼,查询出来的还不够准确,,
总结:一定要用第二种方法
特此记录,,