有一张告警记录表,需要统计按时间排序超过3000条数据中task_id出现的次数,比如共4000条数据,按时间排序后取最后1000条
取后1000条数据ORM,求和方法
WarningRecordModel.objects.values("gc_task_id").annotate(count=Count('gc_task_id')).order_by('-createdtime')[3000:]
转换后mysql
SELECT `gh_t_warning_record`.`gc_task_id`, COUNT(`gh_t_warning_record`.`gc_task_id`) AS `count` FROM `gh_t_warning_record` GROUP BY `gh_t_warning_record`.`gc_task_id`, `gh_t_warning_record`.`createdtime` ORDER BY `gh_t_warning_record`.`createdtime` DESC
发现问题
因为groupby中有了createdtime,所以没有得到需要的聚合
需要mysql
SELECT l.gc_task_id,COUNT(l.gc_task_id)
FROM ( SELECT *
FROM gh_t_warning_record
ORDER BY createdtime desc
LIMIT 18446744073709551615 OFFSET 2000
) as l
GROUP BY l.gc_task_id