You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Impala按周(周日至周六)分组统计登录次数求助

Impala按周日至周六分组统计登录次数解决方案

假设你的登录数据存储在表login_stats中,包含login_date(日期类型,登录日期)和login_count(当日登录次数)两个核心字段,以下是实现按周日至周六分组统计的查询语句:

基础查询语句(已按日期聚合次数的场景)

SELECT
  -- 生成格式为「YYYY-MM-DD 至 YYYY-MM-DD」的周范围文本
  CONCAT(
    DATE_FORMAT(week_start, 'yyyy-MM-dd'),
    ' 至 ',
    DATE_FORMAT(date_add(week_start, 6), 'yyyy-MM-dd')
  ) AS week_range,
  SUM(login_count) AS total_login_times
FROM (
  SELECT
    login_date,
    login_count,
    -- 计算当前日期所属周的周日起始日期
    date_add(login_date, 1 - dayofweek(login_date)) AS week_start
  FROM login_stats
) t
GROUP BY week_start
ORDER BY week_start DESC;

原始登录记录场景(未按日期聚合,每条记录为一次登录)

如果你的表是原始登录记录表login_records,仅包含login_time(登录时间,datetime类型)字段,可使用以下语句:

SELECT
  CONCAT(
    DATE_FORMAT(week_start, 'yyyy-MM-dd'),
    ' 至 ',
    DATE_FORMAT(date_add(week_start, 6), 'yyyy-MM-dd')
  ) AS week_range,
  COUNT(*) AS total_login_times
FROM (
  SELECT
    login_time,
    -- 先将datetime转为date,再计算周起始周日
    date_add(cast(login_time as date), 1 - dayofweek(cast(login_time as date))) AS week_start
  FROM login_records
) t
GROUP BY week_start
ORDER BY week_start DESC;

关键逻辑说明

  • 周起始计算:Impala的dayofweek()函数返回值范围为1(周日)至7(周六),通过date_add(login_date, 1 - dayofweek(login_date))可将任意日期映射至其所在周的周日:
    • 若日期本身是周日,偏移量为0,直接返回当日;
    • 若日期为周一至周六,偏移量为负数,返回当周的周日。
  • 周范围显示:使用CONCAT()和DATE_FORMAT()拼接周起始(周日)和周结束(周六,即起始+6天)的日期文本,提升结果可读性;
  • 排序:通过ORDER BY week_start DESC保证结果按时间从新到旧排列,符合常规查看习惯。

内容的提问来源于stack exchange,提问作者user12487929

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 03:31:05