SQL一周内最大活跃天数

案例一:自然周内最大活跃天数,按“日历周(周一到周日)”统计。
思路:
①给每一天标上年 + 周号
②按 (gaid, 年, 周)统计活跃天数
③再按 gaid 取最大值

易错点:
①周号的写法
②统计活跃天数时要去重

select
  gaid,
  max(active_days) as max_active_days_in_week
from (
  select
    gaid,
    year(ds)  as yr,
    weekofyear(ds) as wk,
    count(distinct ds) as active_days
  from active_log
  group by gaid, year(ds), weekofyear(ds)
) t
group by gaid;

案例二:任意连续 7 天内最大活跃天数(滑动窗口)
思路:
① 以每一天作为窗口终点​
对每一个 ds,看它往前 6 天 + 当天
② 统计该窗口内的活跃天数​
用 count(distinct ds),避免同一天多次活跃
③ 按用户取最大值​得到每个用户在任意连续 7 天内,最多活跃几天

易错点:
①窗口写错成 ROWS,range between 6 preceding按日期值
②统计活跃天数时要去重count(distinct ds)

select
  gaid,
  max(window_active_days) as max_active_days_last_7d
from (
  select
    gaid,
    ds,
    count(*) over (
      partition by gaid
      order by ds
      range between 6 preceding and current row
    ) as window_active_days
  from active_log
) t
group by gaid;
全部评论

相关推荐

评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务