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

按日期分组并去重user_id,统计每日有Swipes的用户数量

每日滑动行为用户数统计方案

需求

统计每日有滑动(Swipes)行为的用户数量:按日期分组,每组内同一用户(user_id)多次滑动仅计1次,最终输出每日的用户计数,而非具体滑动记录。

你的代码问题

你写的这段代码:

Swipe::all()->groupBy(function($item){ return $item->created_at->format('d-M-y'); })->unique('user_id')

逻辑有误——unique('user_id')是对整个集合去重,不是分组内去重。比如用户在两天都有滑动,只会被保留在其中一个日期组里,完全不符合需求。

正确实现

方案1:数据库端统计(优先选,性能好)

直接用SQL做分组+去重计数,不用把所有记录加载到内存:

// 基础版,日期格式为YYYY-MM-DD
$dailyCounts = Swipe::selectRaw('DATE(created_at) as date, COUNT(DISTINCT user_id) as user_count')
    ->groupBy('date')
    ->get();

// 如果要你需要的d-M-y格式(比如05-Oct-24),MySQL用DATE_FORMAT调整
$dailyCounts = Swipe::selectRaw("DATE_FORMAT(created_at, '%d-%b-%y') as date, COUNT(DISTINCT user_id) as user_count")
    ->groupBy('date')
    ->get();

方案2:集合层面处理(仅适合小数据量)

如果一定要在Laravel集合里处理,需要对每个分组单独去重计数:

$dailyCounts = Swipe::all()
    ->groupBy(fn($item) => $item->created_at->format('d-M-y'))
    ->map(fn($group) => $group->unique('user_id')->count());

返回的是键为日期、值为当日滑动用户数的集合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 19:15:23