我需要执行一些看起来像这样的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子句。
答案 0 :(得分:0)
SQL是否有效? having MAX(approve_dt)
部分肯定看起来很可疑。也许你的意思是:
SELECT DISTINCT
main_approve.approve_firm_id,
main_approve.approve_dt,
main_approve.approve_result
FROM
main_approve
JOIN (
SELECT
approve_firm_id,
MAX(approve_dt) AS max_dt
FROM
main_approve
GROUP BY
approve_firm_id
) AS t
ON
main_approve.approve_firm_id = t.approve_firm_id
AND main_approve.approve_dt = t.max_dt
WHERE
main_approve.approve_result = 0;
在知道SQL究竟是什么之后,构建ORM表达式会更容易。