我不太清楚如何更好地提出这个问题。实际上我有一个交易表。每个客户的此表具有针对该客户的1到多行事务。每行,它标记在之前发生的先前客户的客户ID。例如:
Cust_ID Tran_Type Prev_ID 10 A 9 10 B 9 9 T 7 9 A 7 8 B ~ 8 A ~ 7 T ~
在此示例中,cust 7是使用此程序的个人当天的起始客户。然后他们开始为客户9工作,然后最终客户10工作。此外,对于另一个人,他们从客户8开始,并且一整天都没有做另一笔交易。我预期的两个组是A组,它由客户7,9,10组成,B组仅由客户8组成。
老实说,我真的很难过。有人有建议吗?我非常肯定我想首先对独特的客户ID和以前的ID进行分组,这些ID会给我:
Cust_ID Prev_ID 10 9 9 7 8 ~ 7 ~
此时虽然我不确定如何使用vanilla sql做到这一点。感谢。
答案 0 :(得分:0)
应该是group by
select
custid, prev_id
from transactiontable
group by custid,previd
答案 1 :(得分:0)
你是对的,你从不同的行开始。然后递归地从记录中上升而没有先前的交易。
with pairs as
(
select distinct cust_id, prev_id from transactions
)
, groups (cust_id, prev_id, grp, pos) as
(
select cust_id, prev_id, row_number() over (order by cust_id), 1
from pairs
where prev_id is null
union all
select p.cust_id, p.prev_id, g.grp, g.pos + 1
from pairs p
join groups g on g.cust_id = p.prev_id
)
select cust_id, prev_id, grp
from groups
order by grp, pos;
REXTESTER演示:http://rextester.com/NZGLU84962