Oracle表中筛选MODIFIED_DATE相同且计数为2的记录
筛选同一JOB_ID下MODIFIED_DATE重复2次的记录
要找出所有同一JOB_ID对应相同MODIFIED_DATE的记录恰好有2条的条目,可以用以下两种常用方法:
方法1:子查询关联统计结果
先分组统计每个JOB_ID+MODIFIED_DATE组合的记录数,筛选出数量为2的组合,再关联原表获取完整记录:
SELECT t.* FROM your_table_name t JOIN ( SELECT JOB_ID, MODIFIED_DATE FROM your_table_name GROUP BY JOB_ID, MODIFIED_DATE HAVING COUNT(*) = 2 ) cnt ON t.JOB_ID = cnt.JOB_ID AND t.MODIFIED_DATE = cnt.MODIFIED_DATE ORDER BY t.JOB_ID, t.MODIFIED_DATE;
将your_table_name替换为你的实际表名即可。
方法2:窗口函数(高效推荐)
使用窗口函数直接在原表行中计算对应JOB_ID+MODIFIED_DATE的记录数,再筛选出数量为2的行:
SELECT * FROM ( SELECT t.*, COUNT(*) OVER (PARTITION BY JOB_ID, MODIFIED_DATE) AS date_count FROM your_table_name t ) WHERE date_count = 2 ORDER BY JOB_ID, MODIFIED_DATE;
注意事项
如果MODIFIED_DATE字段包含时分秒等时间部分,而你需要**仅按日期(忽略时间)**统计,需用日期截断函数处理。以Oracle为例,用TRUNC(MODIFIED_DATE)替换原语句中的MODIFIED_DATE,示例:
-- 按日期(忽略时分秒)筛选的窗口函数写法 SELECT * FROM ( SELECT t.*, COUNT(*) OVER (PARTITION BY JOB_ID, TRUNC(MODIFIED_DATE)) AS date_count FROM your_table_name t ) WHERE date_count = 2 ORDER BY JOB_ID, TRUNC(MODIFIED_DATE);
内容的提问来源于stack exchange,提问作者Nadeem
相关产品推荐
相关产品推荐

