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

参考技术A A假设字段如下
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 中如何取每个小组的第一行数据的主要内容,如果未能解决你的问题,请参考以下文章

sql 怎么分组取行数最大的一条

Oracle SQL:根据每个分区中的第一行进一步对 PARTITION BY 组进行排序

如何快捷地查询Oracle中每个用户表的表名和行数?

oracle 取重复数据中一条

java中如何实现由第一行输入行数,剩下几行输入数据(每行一个)

oracle取对应多条数据中的一条的问题