讨论数量:
这个常见做法,就是写个脚本 每天定时把前一天的结果汇总到一个新表中,这个新表就是聚合后的结果。然后查询的时候,如果需要当天的数据,查原表和新表进行组合。 比直接查明细表快很多。一年365天,10年才3000多条记录
既然 指定月份查询统计 都写了, 指定年份 之 统计所有月份 sql也写上吧,( 原生SQL 自行转换 ORM, field 为时间类型的数据库字段 --datetime 或 timestamp)
SELECT
DATE_FORMAT( field ,'%Y-%m') as MONTH,
SUM( 需要统计的字段 )
FROM
table
WHERE
DATE_FORMAT(field ,'%Y') = '2019'
GROUP BY
date_format(field , '%Y-%m');
欧了 :joy:
刚好之前有个项目也是有统计的,做法跟楼上各位说的一样,定时任务分表,查询差不多就像这样,随便改了下你可以看看,哈哈哈
$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();
数据不多可以用 DATE_FORMAT
函数
SELECT SUM(`column`) FROM `table` WHERE DATE_FORMAT(`created_at`, '%Y-%m')='2019-09';
推荐文章: