- 最大连续回答问题,考察如何体现日期的连续性
- 思路:首先构造日期的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