• 最大连续回答问题,考察如何体现日期的连续性
  • 思路:首先构造日期的DENSE_RANK,对日期做差值后形成dt,之后dt只使用并必须使用作为GROUP的其中一个因素,最大天数需要通过COUNT(DISTINCT answer_date)计算,这是由于如果COUNT(dt)会导致会多计算一天内回答多次的情况,COUNT(DISTINCT dt)则会导致仅输出结果1。
WITH t1 AS(
    SELECT answer_date
            , author_id
            , DENSE_RANK() OVER(PARTITION BY author_id ORDER BY answer_date) AS ranking
    FROM answer_tb
)

SELECT author_id
        , author_level
        , MAX(days_cnt)
FROM (
    SELECT author_id
            , COUNT(DISTINCT answer_date) AS days_cnt
    FROM (
        SELECT answer_date
                , author_id
                , DATE_SUB(answer_date,INTERVAL ranking day) AS dt
        FROM t1
    ) data1
    GROUP BY author_id, dt
    HAVING days_cnt >= 3
) data2
JOIN author_tb USING(author_id)
GROUP BY author_id, author_level