我有如下所示的客户交易数据,需要创建一个仅包含总订购单位始终小于先前订单的客户的列表。即,在第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.
我最初考虑在对事务进行排序后使用滞后函数,然后使用条件语句,但事务数量因客户而异。
此致
答案 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;