我在Django中有两个查询,它们独立工作,但是我似乎无法将它们链接在一起:
q1 = M.objects.values('f1', 'f2').annotate(Min('timestamp')).filter(timestamp__min__gte=datetime.datetime(2020, 4, 30, 11, 6, 15, 998799)).values('f1', 'f2')
q2 = M.objects.values('f2').annotate(Count('f1'))
这是第一个查询的SQL:
SELECT `t`.`f1_id`, `t`.`f2` FROM `t` GROUP BY `t`.`f1_id`, `t`.`f2` HAVING MIN(`t`.`timestamp`) >= '2020-04-30 11:06:15.998799' ORDER BY NULL
从第二个开始:
SELECT `t`.`f2`, COUNT(`t`.`f1_id`) AS `f1__count` FROM `t` GROUP BY `t`.`f2` ORDER BY NULL
如果我尝试将它们链接在一起:
q3 = q1.values('f2').annotate(Count('f1'))
我得到:
SELECT `t`.`f2`, COUNT(`t`.`f1_id`) AS `f1__count` FROM `t` GROUP BY `t`.`f2` HAVING MIN(`t`.`timestamp`) >= 2020-04-30 11:06:15.998799 ORDER BY NULL
这不是我想要的。我想要的是:
SELECT `t`.`f2`, COUNT(`t`.`f1_id`) AS `f1__count` FROM (SELECT `t`.`f1_id`, `t`.`f2` FROM `t` GROUP BY `t`.`f1_id`, `t`.`f2` HAVING MIN(`t`.`timestamp`) >= '2020-04-30 11:06:15.998799' ORDER BY NULL) AS `t` GROUP BY `t`.`f2` ORDER BY NULL
我不确定如何通过RawSQL或RawQuerySet在纯python / Django中实现此目标。