oracle 中如何取每个小组的第一行数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 中如何取每个小组的第一行数据相关的知识,希望对你有一定的参考价值。
如表A:
a 2
b 1
c 2
a 1
b 6
按a,b,c分组后,显示后面值最小的一项,即显示为:
a 1
b 1
c 2
name id
a 2
b 1
SQL通用方法
SELECT * FROM
a t1 WHERE NOT EXISTS(SELECT 1 FROM A WHERE name = t1.name
and id < t1.id)
也可以用ORACLE独有的row_number,
SELECT name, id
FROM (SELECT name, id, ROW_NUMBER() OVER(PARTITION BY NAME ORDER BY ID) RK from A) t
WHERE rk = 1 参考技术B SELECT
第一个字段, MIN(第二个字段)
FROM
A
GROUP BY
第一个字段本回答被提问者采纳
oracle和mysql中分组取特定的某一行的数据
参考技术A假设有若干张表tb1、tb2、tb3,查询各张表中的一些字段,若tb1和tb2中是1对1的关系,tb2和tb3是1对多的关系,若要同时查询tb1、tb2和tb3中的一些字段,对于相同的tb1和tb2对应的数据,可能会有多条查询的结果,如果只想查询tb3中对应的某一条数据,这时候sql该如何去编辑呢?
这时候有两种思路,第一种,先不查询tb3中的字段,先去查询tb1和tb2中的字段,再通过遍历结果集去单独查询tb3中的数据,这样的sql会简化,但在相同的查询条件下,用时会增加很多,因为多次查询数据库会有数据库连接的损耗;第二种,是通过一个sql去直接筛选选出分组,下面我分别列举oracle和mysql的用法
如果tb3中一个country(国家)对应的别名(short_name)有多个,
那对应的原始的sql为
oracle中的用法: 改善sql
mysql中的用法: 改善sql
以上是关于oracle 中如何取每个小组的第一行数据的主要内容,如果未能解决你的问题,请参考以下文章
Oracle SQL:根据每个分区中的第一行进一步对 PARTITION BY 组进行排序