对于 2005、2008 版本:
declare @t table(cust int, ord_s int, ord_a int);
insert @t values
(1,1,30), (1,3,40), (2,1,40), (2,6,30), (3,4,15),
(3,7,60),(3,8,50),(4,2,32),(4,5,2),(4,7,4);
with cte as
(
select row_number() over(partition by cust order by ord_s) as rn, *
from @t
)
select c1.cust,
c1.ord_s,
c1.ord_a,
c2.ord_a as prv
from cte as c1 join cte as c2
on c1.cust = c2.cust and c1.rn = c2.rn + 1
where c1.ord_a > c2.ord_a;
听到的想法总是一样的,你应该找到之前的订单,如果你不能使用lag,你可以像上面那样枚举每个客户的订单并加入相邻的订单,如果你不能使用甚至row_number,你可以搜索最近的值不如现在这样:
select tt1.*
from
(
select *,
(select max(t2.ord_s) from @t t2 where t2.cust = t1.cust and t2.ord_s < t1.ord_s) as prv
from @t t1
) tt1
join @t tt2
on tt1.cust = tt2.cust and tt1.prv = tt2.ord_s
where tt1.ord_a > tt2.ord_a;