Oracle SQL查询无新增文件的15天以上历史文件
解决Oracle SQL筛选特定File记录的问题
要实现你需要的筛选逻辑,核心是两步:先找出近15天没有新增文件的文章,再从这些文章中挑选出自身插入时间超过15天的File记录。原语句只判断了文件自身的插入时间,没关联文章的整体情况,所以会返回不符合要求的记录。
方案一:子查询筛选符合条件的文章
SELECT f.* FROM File f WHERE f.insertion_date <= SYSDATE - 15 AND f.article_id IN ( -- 找出近15天无新增文件的文章:最新文件插入时间超过15天 SELECT article_id FROM File GROUP BY article_id HAVING MAX(insertion_date) <= SYSDATE - 15 );
方案二:JOIN关联聚合结果(适合大数据量场景)
SELECT f.* FROM File f JOIN ( SELECT article_id FROM File GROUP BY article_id HAVING MAX(insertion_date) <= SYSDATE - 15 ) valid_articles ON f.article_id = valid_articles.article_id WHERE f.insertion_date <= SYSDATE - 15;
逻辑验证
- 对于文章1:存在10天前的文件,子查询中
MAX(insertion_date)为10天前(晚于SYSDATE-15),因此该文章不会被纳入筛选范围,其20天前的文件也不会被返回 - 对于文章2:所有文件插入时间均为15天前,
MAX(insertion_date)等于SYSDATE-15,符合文章筛选条件,且自身插入时间满足要求,所以所有4条记录都会被返回
内容的提问来源于stack exchange,提问作者Vinnicius Santos
相关产品推荐
相关产品推荐

