【发布时间】:2010-08-18 03:42:46
【问题描述】:
我需要执行一些如下所示的 SQL:
select approve_firm_id,approve_dt,approve_result
from main_approve
group by approve_firm_id
having MAX(approve_dt) and approve_result=0;
它运行(mysql-5.1), 但如果我在 Django 模型中尝试这样:
Approve.objects.annotate(max_dt=Max('approve_dt')).
filter(max_dt__gt=0).filter(approve_result=0).query
生成的查询是这样的:
SELECT `main_approve`.`id`, `main_approve`.`approve_result`,
`main_approve`.`approve_dt`, `main_approve`.`approve_user_id`,
`main_approve`.`approve_firm_id`, `main_approve`.`exported_at`,
MAX(`main_approve`.`approve_dt`) AS `max_dt` FROM `main_approve`
WHERE (`main_approve`.`approve_result` = 0 )
GROUP BY `main_approve`.`id`
HAVING MAX(`main_approve`.`approve_dt`) > 0
ORDER BY NULL
我需要 WHERE 子句是 AFTER GROUP BY 子句。
【问题讨论】:
-
Mike Atlas,感谢您的纠正,但我的意思是“我需要 WHERE 子句成为 AFTER GROUP BY 子句”,因为它实际上之前运行过。
标签: sql django annotate having-clause