oracle中查询多个字段并根据部分字段进⾏分组去重
牛排炖萝卜的做法说到分组和去重⼤家率先想到的肯定是group by和distinct,
1.distinct对去重数据是要根据所有要查询的字段去重,不能对查询结果部分去重。
例如:
lect name ,age ,x from ur where x = "男";
亲切造句
要是只根据name和age去重,这⾥⽆法使⽤distinct关键字了。
lect name ,age ,x from ur where x = "男" group by name,age;
但是在Oracle数据库中该sql语句是⽆法正常执⾏的,会报如下错误
意思是在Oracle中,group by后的字段需要与lect中查询的字段需要⼀⼀对应(函数除外);
3.使⽤over()分析函数
⾸先看原始sql
SELECT t3.*
FROM (
SELECT t1.cateid, t1.product_id, t1.ur_type, t2.expire_time
FROM (幼儿园教学
SELECT cfg.cateid, cfg.product_id, cfg.ur_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.ur_type, t2.expire_time, ROW_NUMBER() OVER (PARTITION BY t1.cateid, t1.product_id ORDER pire_time ASC) AS ROW_NUM FROM (
怎么删除空白页
SELECT cfg.cateid, cfg.product_id, cfg.ur_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
这⾥我们就对数据进⾏了完整的去重操作。