sql函数如何使用 其中campaignid为某波投放活动的id

其中campaignid为某波投放活动的id,trackingid为投放中点位的id,media表示投放媒体,cookieid就是该条记录的cookie,userid为该人的唯一标识(设备id),url就是该条记录url,osversion就是产生该条记录的设备系统,devtype为产生该条记录的设备类型(移动端:mobile,pc端:pc),time为记录生成时间,score为一项指标,gap为另一项指标。
event和pday为分区。event中:imp表示曝光,clk表示点击,adv表示到达。pday表示数据日期,区间为20200401-20200430
3. 从点击数据中挑选整个四月份在campaignid=2124,1)每个人的最大score以及在2)此score下最小gap的userid。请使用两种方法,第一种使用窗口函数,第二种不使用。(请写出sql)
第一种:使用窗口函数
第二种:不使用

第一种方法(使用窗口函数):

SELECT userid, MAX(score) OVER (PARTITION BY userid) as max_score, MIN(gap) OVER (PARTITION BY userid, score ORDER BY score DESC) as min_gap 
FROM your_table 
WHERE campaignid = 2124 AND event = 'clk' AND pday BETWEEN 20200401 AND 20200430

第二种方法(不使用窗口函数):

WITH user_score AS (
  SELECT userid, score, MIN(gap) as min_gap 
  FROM your_table 
  WHERE campaignid = 2124 AND event = 'clk' AND pday BETWEEN 20200401 AND 20200430
  GROUP BY userid, score
), max_score AS (
  SELECT userid, MAX(score) as max_score 
  FROM user_score 
  GROUP BY userid
) 
SELECT user_score.userid, max_score.max_score, user_score.min_gap 
FROM user_score 
JOIN max_score ON user_score.userid = max_score.userid AND user_score.score = max_score.max_score

说明:
第一种方法中使用窗口函数 MAX() OVER (PARTITION BY userid) 和 MIN() OVER (PARTITION BY userid, score ORDER BY score DESC) 来获取每个人的最大score和在此score下的最小gap。
第二种方法中使用两个子查询分别筛选出每个人的最大score和score对应的最小gap,然后使用JOIN将两个子查询结果连接起来得到结果。