当前位置: 代码迷 >> 综合 >> SQL分析函数练习:假设在任意4天内(不是最近4天),例如3号0点到7号23点59分 购买3次及以上 为 vip,求vip用户
  详细解决方案

SQL分析函数练习:假设在任意4天内(不是最近4天),例如3号0点到7号23点59分 购买3次及以上 为 vip,求vip用户

热度:97   发布时间:2024-01-28 01:02:49.0
-- 假设在任意4天内(不是最近4天),例如3号0点到7号23点59分 购买3次及以上 为 vip,求vip用户SELECT DISTINCT T1.`user` from 
(SELECT `user`,amount,time,rank() over (PARTITION by `user` ORDER BY time) rn FROM `records`) T1
INNER JOIN 
(SELECT `user`,amount,time,rank() over (PARTITION by `user` ORDER BY time) rn FROM `records`) T2
on T1.rn=T2.rn+2 and T1.`user`=T2.`user` and DATEDIFF(T1.time,T2.time)<= 4;

1.分组排序,若为;

2.自连接;

3.通过序号来达成“购买3次及以上”的条件,时间做差满足时间范围;

4.distinct 去重.

 

-- 假设在任意4天内(不是最近4天),例如3号0点到7号23点59分 购买3次及以上,且购买金额之和大于10为 vvip,求vvip用户SELECT A.`user` from 
(
SELECT `user`,amount,rank()  over (PARTITION by `user` ORDER BY time) div 3 `part` 
from `records`
) A
INNER JOIN 
(
SELECT T1.`user`,T1.rn div 3 `part` from 
(SELECT `user`,amount,time,rank() over (PARTITION by `user` ORDER BY time) rn FROM `records`) T1
INNER JOIN 
(SELECT `user`,amount,time,rank() over (PARTITION by `user` ORDER BY time) rn FROM `records`) T2
on T1.rn=T2.rn+2 and T1.`user`=T2.`user` and DATEDIFF(T1.time,T2.time)<= 4
) T3
on A.`user`= T3.`user` and A.`part`= T3.`part`
GROUP BY A.`user`,A.`part`
HAVING SUM(amount)>10

 

  相关解决方案