sql数据库怎么实现分组并取每组的前1条语句,按日期排序?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql数据库怎么实现分组并取每组的前1条语句,按日期排序?相关的知识,希望对你有一定的参考价值。

select * from
(
select row_number() over(partition by '分组' order by '日期') as rownum -- 排序并分组
, * -- 所需显示的字段
from 表
) as T
where T.rownum = 1

对每组的数据按日期排序并加上行号
取出时只取行号为1,也就是第一条数据。追问

这种方法,能同时一次对两个字段分组波,即两个字段内容相同为一组

追答

可以的
逗号分开

select * from
(
select row_number() over(partition by 'Gr1',‘Gr2’[, ...]
order by 'Sort1', 'Sort2'[, ...]) as rownum -- 排序并分组
, * -- 所需显示的字段
from 表
) as T
where T.rownum = 1

追问

我的意思是两字段唯一标示一条记录,不是在分组中分组

追答

不是很明白你的意思
但是这不是分组中分组。。
这个只分组了一次,给每组的数据都加上rownum,再选取每组中的第一条
C1 C2 C3
1 A 2012
2 A 2013
1 B 2012
2 B 2013
...
C1是rownum, C2是分组条件,C3是排序条件
只选取C1 = 1 的

参考技术A 你对分组的理解不到位
分组是指把可些的数据使用聚合函数(max,min,avg)等计算
分组后的每组本身会变成一行
不存在每组的前一条
参考技术B select top 1 * from 表 group by 分组条件 order by 日期

oracle开展分组后,取出每组的前几条数据

参考技术A oracle进行分组后,取出每组的前几条数据SELECT *FROM (SELECT 分组的字段名,ROW_NUMBER() OVER(PARTITION BY 分组的字段名 ORDER BY 排序的字段名) AS RNFROM 表名)WHERE RN <= 10�0�2本回答被提问者采纳

以上是关于sql数据库怎么实现分组并取每组的前1条语句,按日期排序?的主要内容,如果未能解决你的问题,请参考以下文章

mysql分组后,取每组的前3条数据(并且有顺序)

MySQL取每组的前N条记录

oracle开展分组后,取出每组的前几条数据

mysql分组排序,取每组第一条数据

Oracle分组查询取每组排序后的前N条记录

mysql 分组后 每组随机取一条记录 求sql语句