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

按日期分组统计唯一客户数量的实现问题

按日期统计唯一访客数解决方案

需求回顾

给定数据表:

client_idactiondate (datetime)
1visit2024-10-10 10:00
1visit2024-10-10 12:00
1visit2024-10-10 13:00
2visit2024-10-10 13:00

需要按日期分组,统计每日唯一客户的访问数量,期望结果:{'date': '2024-10-10', "count_visits": 2}


Django ORM 实现代码

假设你的模型类名为VisitRecord,表中date (datetime)字段对应模型中的visit_datetime:

from django.db.models import Count
from django.db.models.functions import TruncDate

# 核心查询逻辑
queryset = VisitRecord.objects.filter(action="visit").annotate(
    date=TruncDate("visit_datetime")  # 将datetime类型字段截断为日期部分
).values("date").annotate(
    count_visits=Count("client_id", distinct=True)  # 统计唯一客户数
).values("date", "count_visits")

# 转换为目标字典格式(含日期字符串转换)
result = {}
if queryset.exists():
    raw_result = queryset.first()
    result = {
        "date": raw_result["date"].strftime("%Y-%m-%d"),
        "count_visits": raw_result["count_visits"]
    }

关键逻辑说明

  1. TruncDate函数:将datetime类型的时间字段转换为纯日期,确保同一日期的所有记录被归为同一分组。
  2. Count(..., distinct=True):指定统计唯一的client_id,避免同一客户多次访问被重复计数。
  3. 两次values调用:第一次values("date")指定分组字段,第二次values("date", "count_visits")明确最终返回的字段结构。

执行后result即为你需要的格式:{'date': '2024-10-10', 'count_visits': 2}

内容的提问来源于stack exchange,提问作者Андрей

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 22:45:04