如何识别在7天内订购3个或更多订单的客户.SQL/整体/红移



摘要:我想在7天内获得拥有3个及更多orderid的客户列表。如果客户满足每个日期的标准,那么一个客户可能会出现多次。

表名:T1

订单IDA1B3vds34rve4-3f>td style="text-align:center;">2021年1月AA2Bhvdhkc767-s3d>td style="text-align:center;">2021年1月EA986bckd33rfvfbvdf021年1月A1B3jdbjkvshb3rdec2021年1月SFK3bhabsd-bbc83ccs021年2月1日//tr>AA2Bhcbadcbsbc7cd2021年3月1日A1B3hjjac73an83-3fc2021年7月1日DEH32gdyafjk-24vfd2021年7月1日A1B3jkhbdj434jcbjke2021年7月1日AA2Bjkkcbjq90ksnc021年8月1日//tr>AA2Bcjbugd3ahsddka021年8月1日//tr>A1B3kbcq7w69ufj4t4021年9月1日//tr>SFK3bcdub7wklcna82021年9月1日EA986cbyatea4jwndns021年9月1日A1B3biqbdepaljkcl92021年9月1日AA2Bnuqya8wownd2ln2021年9月1日//tr>A1B3ndkuq2uowmdlqn021年9月1日

您可以使用lead()。但要计数就更难了。从该条件成立的日期开始:

select t.*
from (select t.*,
lead(createdat, 2) over (partition by customerid order by createdat) as date_2
from t
) t
where date_2 < createdat + interval '7 day';

如果你真的需要计数,那么有一种方法是自加入:

select t.customerid, t.createdat, count(*)
from t join
t t2
on t2.customerid = t.customerid and
t2.createdat >= t.createdat and
t2.createdat < t.createdat + interval '7 day'
group by t.customerid, t.createdat
having count(*) >= 3;

最新更新