汇总子查询和外部查询

时间:2020-05-29 09:17:01

标签: sql django

我在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中实现此目标。

0 个答案:

没有答案
相关问题