【SQLServer】使用Outer Apply + Order top 1 分析最近一次价格成本涨跌情况

最近公司需要分析物料单价与前一次变动价格的涨跌差异,之前使用rownumber方式解决遇到效能的问题。

在S.O发文求助后,从Squirrel大的回答学到可以使用OUTER APPLY + Order top 1方式高效解决此问题。连结 : Stack Overflow 觉得有帮助记得帮Squirrel大按个Upvote。


举例 :

目前有採购明细资料如下 :

当使用者查询 order_date between 2020-02-02 and 2020-02-10会希望得到以下结果
得出与最近一次採买,单价、成本的涨跌情况

逻辑像图片显示这样


Squirrel大主要利用apply的特性,可以将外查询的值带入子查询特性,以日期倒序 + top 1 + 单价不同条件 抓取同物料最后一笔不同单价的资料,至于使用OUTER原因是以外查询为準

查询Script如下 :

SELECT *,       unit_price_diff = T.[unit_price] - L.[last_unit_price_before]FROM   TOUTER APPLY(    SELECT TOP 1             last_unit_price_before = x.[unit_price],            last_unit_price_change_date = x.[order_date]    FROM   T x    WHERE  x.[prdt_no] = T.[prdt_no]        AND    x.[order_date] < T.[order_date]         AND    x.[unit_price] <> T.[unit_price]    ORDER BY x.[order_date] DESC) LWHERE  T.[order_date] >= '2020-02-01' AND  T.[order_date] <= '2020-02-10'

线上测试demo连结 : SQL Server 2012 | db<>fiddle


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章