讨论数量:
数据不多可以用 DATE_FORMAT
函数
SELECT SUM(`column`) FROM `table` WHERE DATE_FORMAT(`created_at`, '%Y-%m')='2019-09';
这个常见做法,就是写个脚本 每天定时把前一天的结果汇总到一个新表中,这个新表就是聚合后的结果。然后查询的时候,如果需要当天的数据,查原表和新表进行组合。 比直接查明细表快很多。一年 365 天,10 年才 3000 多条记录
刚好之前有个项目也是有统计的,做法跟楼上各位说的一样,定时任务分表,查询差不多就像这样,随便改了下你可以看看,哈哈哈
$query = DB::table('XXXX_per_month as a')
->select(DB::raw("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX,DATE_FORMAT('created_at','%Y-%m') as date"))
->Join('users as b', 'a.user_id', '=', 'b.id')
->groupBy(DB::raw("date"))
->groupBy(DB::raw("b.username"));
//条件筛选 某时间段内
if (!empty($start)) {
$query->whereRaw('created_at>= ?', $start);
}
if (!empty($end)) {
//
}
$data = $query->get();
推荐文章: