with cte as(
select t.base_group_id,t.base_task_agent_id,t.user_id,g.base_role_id,r.role_name,g.base_org_id,o.name_,t.ben_time,t.end_time
from base_task_agent t,base_role r,base_organization o,base_group g,base_user u
where u.user_id =756550 and u.user_id = t.user_id and t.base_group_id = g.base_group_id and g.base_role_id = r.role_id and g.base_org_id = o.org_id and t.end_time > to_Date('2012-01-05', 'yyyy-MM-dd')
)
select * from (
select t.*,row_number() over (partition by base_group_id order by base_task_agent_id) rid from cte t
) a where rid=1
简单解释一下 with cte as() 括号内的内容 就是查询的sql 结果 其中包含重复数据,单纯的distinct无法解决 order by也不知怎么搞 于是用with as() 创建一个临时表 cte为临时表的名字
然后
select t.* ,row_number() over(partition by base_group_id order by base_task_agent_id) rid from cte t 这句sql的意思是 查询临时表cte 别名为t row_number() over(partition by 需要检索重复的列 order by 排序的列名) 别名为 rid form cte t
这时候查询就会获得一个rid列 如果base_group_id存在多条相同值就以1开始递增
select * from (↑) a where rid = 1 筛选rid为1 也就是base_group_id只出现一次的数据 这就是去重复了
分享到:
相关推荐
SELECT t.*, ROW_NUMBER() OVER (PARTITION BY name || idNumber || TO_CHAR(date, 'YYYYMMDD') ORDER BY id) AS rn FROM teacher t ) subquery WHERE rn = 1; ``` - **PARTITION BY** 子句中的`name || idNumber...
第二步,我们添加row_number() over(partition by outer_code order by outer_code)来标识重复记录,这将为同一`outer_code`下的每一行分配一个唯一的行号。第三步,我们可以利用这个行号来删除重复数据,只保留每组...
ROW_NUMBER() OVER (PARTITION BY <column_list> ORDER BY <order_by_expression>) ``` - **PARTITION BY**:用于指定按照哪些列进行分组。 - **ORDER BY**:用于指定如何对分组内的行进行排序。 #### 三、Row_...
Oracle数据库中的`row_number() over()`分析函数是一个非常实用的工具,用于为数据集中的每一行分配一个唯一的整数,这个数字基于指定的排序条件。在处理大数据集时,它可以帮助我们进行分页、排名或者在复杂的查询...
row_number()over(partition by col1 order by col2)表示根据col1分组,在分组内部根据col2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)。 与rownum的区别在于:使用rownum进行排序的...
`ROW_NUMBER()` 还允许在 `OVER` 子句中添加 `PARTITION BY` 子句,这使得我们可以为每个分区内的行独立编号,从而在分组后进行排序和分页操作。 总结一下 `ROWNUM` 和 `ROW_NUMBER()` 的主要区别: 1. `ROWNUM` ...
ROW_NUMBER() OVER (PARTITION BY region_id ORDER BY customer_sales DESC) AS rank_in_region FROM user_order; ``` 这样,我们就可以在每个区域内找到销售额最高的客户,而不会因为其他区域的客户销售额相同...
- `ROW_NUMBER() over (partition by a.term_id order by a.user_deptno) rk`: 行号rk的计算基于`term_id`分组,按`user_deptno`升序排序。 2. **外层查询**: 然后,通过`t2.rk = 1`条件筛选出每个分组的第一条...
- `ROW_NUMBER() OVER (PARTITION BY CONTRACTID ORDER BY ALTER_DATE) AS rn`:此行代码使用`ROW_NUMBER()`函数为每个`CONTRACTID`分组内的记录分配一个行号,按照`ALTER_DATE`升序排列。 2. **最终查询**: - ...
ROW_NUMBER() OVER (PARTITION BY <partition_column_list> ORDER BY <order_column_list>) ``` - **PARTITION BY** 子句:将数据集分割成多个分区,每个分区内的行独立进行编号。 - **ORDER BY** 子句:确定每个...
如果使用Select Name From StudentTable,显示的结果是: Name 张三 李四 而如果使用Select ROW_NUMBER() AS ROWINDEX,Name From StudentTable,则显示的结果是 ROWINDEX Name 1 张三 2 李四 当然一般查询的结果是...
SELECT ROW_NUMBER() OVER (PARTITION BY n_sec_code ORDER BY n_sec_code, lvl DESC) rn, n_sec_code, text FROM ( SELECT n_sec_code, LEVEL lvl, SYS_CONNECT_BY_PATH(c_researcher_code, '/') text FROM...
### Oracle 语法之 OVER (PARTITION BY ..) 及开窗函数详解 #### 一、OVER (PARTITION BY ..) 概述 在Oracle数据库中,`OVER (PARTITION BY ...)` 是一种非常强大的功能,它允许用户在数据集上进行窗口操作。这在...
SELECT column_name, ROW_NUMBER() OVER (PARTITION BY column_name ORDER BY some_column) AS row_num FROM table_name ) t WHERE row_num = 1; ``` **示例:** 以下是一个具体的例子,根据提供的部分代码: `...
ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY salary DESC) AS row_num FROM employees; ``` 这个查询将为每个部门的员工按工资降序排列,并为每个员工分配一个行号。 ##### 示例2:使用SUM()计算...