如何创建随时间推移购买较少的客户列表?

时间:2017-03-28 21:16:23

标签: sql oracle

我有如下所示的客户交易数据,需要创建一个仅包含总订购单位始终小于先前订单的客户的列表。即,在第n个订单中购买的总数量少于以第n-1个订单购买的总数量,并且下一个先前的订单也更少。另一种说法,列出客户随着时间的推移购买更少的单位。

Custid  date    units
123 28-03-17    100
123 27-03-17    100
123 26-03-17    100
999 25-03-17    10
999 24-03-17    20
893 24-03-17    39
893 28-03-17    48
893 24-03-17    10
893 19-03-17    75
893 12-02-17    10

这样代码的输出应该是客户999.

我最初考虑在对事务进行排序后使用滞后函数,然后使用条件语句,但事务数量因客户而异。

此致

1 个答案:

答案 0 :(得分:2)

使用lag()和条件聚合:

select custid
from (select t.*,
             lag(units) over (partition by custid order by date) as prev_units
      from t
     ) t 
group by custid
having sum(case when units >= pev_units then 1 else 0 end) = 0;