我正在努力处理我的postgresql数据库上的以下查询,它最初是用条令查询生成器构建的(但这在这里不相关)。
我有一个名为“course”的实体,它在“log”表中有多条记录。
记录 log.resumeComplete
有一个日期和记录 log.activated
有个约会。
在这一个查询中,我希望拉出具有 log.activated
早于x和a的日期 log.resumeComplete
比你老。重要的是,一些“课程”记录没有相应的 log.resumeComplete
记录在日志表中。
有没有一种方法可以通过一个查询获得这些信息?
SELECT s0_.slug AS slug, s0_.status AS status, a2_.time AS resumeTime
FROM Course s0_
INNER JOIN Log a1_ ON (a1_.course_id = s0_.id)
INNER JOIN Log a2_ ON (s0_.id = a2_.course_id AND a2_.type = 'log.resumeComplete')
WHERE s0_.status = 'active'
AND s0_.currentsss = '72'
AND a1_.type = 'log.activated'
AND a1_.time < '2020-05-31 14:25:31'
AND a2_.time IS NULL OR a2_.time < '2020-07-11 14:25:31'
ORDER BY s0_.id ASC;
1条答案
按热度按时间ctrmrzij1#
此查询应该可以工作(未得到fiddle/测试集):
改变:
内部连接=>左连接
第一个联接条件上移
或“在所有的透水条件下工作,使它们无用。”()必修的
可能是隐式类型转换(时间<字符串),不利于索引。没有纠正,没有小提琴
sql语句