Oracle中查找date与date2相等的重复行并获取完整行数据
正确查询
date等于date2的完整行数据 你的原查询使用GROUP BY和聚合函数的方式,会将相同date和date2组合的行合并,因此无法返回每一行的id。根据你的需求,分两种情况给出解决方案:
情况1:仅需所有date等于date2的行
直接通过WHERE子句筛选条件,即可获取包含id的完整行数据:
SELECT id, date, date2 FROM tab WHERE date = date2;
情况2:需date等于date2且该组合出现多次的行
如果你的实际需求是找出这类重复组合的所有行,可以用以下两种方式:
方式一:子查询关联
先筛选出符合条件且重复的date/date2组合,再关联原表获取完整行:
SELECT t.id, t.date, t.date2 FROM tab t JOIN ( SELECT date, date2 FROM tab WHERE date = date2 GROUP BY date, date2 HAVING COUNT(*) > 1 ) t2 ON t.date = t2.date AND t.date2 = t2.date2;
方式二:窗口函数(推荐)
使用窗口函数COUNT() OVER()统计每组的行数,再筛选出数量大于1的行:
SELECT id, date, date2 FROM ( SELECT id, date, date2, COUNT(*) OVER(PARTITION BY date, date2) AS cnt FROM tab WHERE date = date2 ) WHERE cnt > 1;
内容的提问来源于stack exchange,提问作者Саша Асеев
相关产品推荐
相关产品推荐

