我在过滤T-SQL数据库中的订单时遇到问题,我们使用的格式为" Q123456"分配订单号,并附加" -X" (X是修订号)。我需要删除所有较旧的版本(以及没有" -X"的原版),如果存在较新版本。
我知道我可以使用通配符,并相互检查字符串,但是我的所有答案看起来都非常低效,无法进行大量的比较。运行时间失控,非常快,我想有一个更好的结构可供使用。
提前感谢您,如果您需要更多信息,请告知我们,我会尽力提供。
编辑:示例数据,您有订单: Q123456 Q123456-1 Q123456-2 Q134567
由于存在Q123456-2,我需要从队列结果中删除Q123456和Q123456-1。 Q124567也将是一个结果,因为它是该订单的最新条目。
答案 0 :(得分:0)
如果我们可以假设:
我们可以使用窗口函数和公用表表达式为每个order_Number系列生成行号(Q123456的Q123456,Q123456-1),然后只选择order_number最高的那个(按订单号desc排序)< / p>
With CTE AS (SELECT A.*, Row_number() over (PARTITION BY substring(Order_Num,1,7)
ORDER BY order_num Desc) RN
FROM table)
Select * from cte where RN = 1
没有cte ......
SELECT *
FROM (SELECT A.*, Row_number() over (PARTITION BY substring(Order_Num,1,7)
ORDER BY order_num Desc) RN
FROM table)
WHERE RN = 1