时间:2021-07-01 10:21:17 帮助过:204人阅读
要是只根据name和age去重,这里无法使用distinct关键字了。
2.group by ,可以在mysql中进行分组查询
select name ,age ,sex from user where sex = "男" group by name,age;
但是在Oracle数据库中该sql语句是无法正常执行的,会报如下错误
意思是在Oracle中,group by后的字段需要与select中查询的字段需要一一对应(函数除外);
3.使用over()分析函数
首先看原始sql
SELECT t3.* FROM ( SELECT t1.cateid, t1.product_id, t1.user_type, t2.expire_time FROM ( SELECT cfg.cateid, cfg.product_id, cfg.user_type FROM xshe_product_cfg cfg WHERE cfg.product_id IN (1080005002, 1100000001, 1100000002) ) t1 LEFT JOIN ( SELECT * FROM xshe_stock WHERE status = ‘04‘ AND expire_time >= sysdate ) t2 ON t1.cateid = t2.cateid ) t3
得到的数据结果集
我们想根据cateid和product_id查询出有效期离得最近的一条记录,这里把重复数据都查询出来了
这里我们使用row_number() over()函数进行去重
SELECT t3.* FROM ( SELECT t1.cateid, t1.product_id, t1.user_type, t2.expire_time, ROW_NUMBER() OVER (PARTITION BY t1.cateid, t1.product_id ORDER BY t2.expire_time ASC) AS ROW_NUM FROM ( SELECT cfg.cateid, cfg.product_id, cfg.user_type FROM xshe_product_cfg cfg WHERE cfg.product_id IN (1080005002, 1100000001, 1100000002) ) t1 LEFT JOIN ( SELECT * FROM xshe_stock WHERE status = ‘04‘ AND expire_time >= sysdate ) t2 ON t1.cateid = t2.cateid ) t3 WHERE t3.ROW_NUM = 1
这里我们就对数据进行了完整的去重操作。
oracle中查询多个字段并根据部分字段进行分组去重
标签:asc color name 图片 weight 分组 http sel eid