WITH RECURSIVE t AS (
    SELECT m2.member_id AS referee_id,
           m2.member_name AS referee_name,
           1 AS referral_level,
          ROUND(base_reward_points*POW(0.5,0),2)  AS actual_points
    FROM referral_records r 
    JOIN members m1 ON r.referrer_id=m1.member_id
    JOIN members m2 ON r.referee_id=m2.member_id
    WHERE join_date BETWEEN '2025-01-01' AND '2025-06-30' AND m1.member_name='张三'

    UNION ALL 

    SELECT m2.member_id AS referee_id,
           m2.member_name AS referee_name,
           referral_level+1 ,
          ROUND(base_reward_points*POW(0.5,referral_level),2)  AS actual_points
    FROM t
    JOIN referral_records r ON r.referrer_id=t.referee_id
    JOIN members m2 ON r.referee_id=m2.member_id
    WHERE join_date BETWEEN '2025-01-01' AND '2025-06-30'   
)
SELECT *
FROM t
ORDER BY referral_level ASC,actual_points DESC,referee_id ASC