sql 分组后求每组中的最大值对应的那条数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 分组后求每组中的最大值对应的那条数据相关的知识,希望对你有一定的参考价值。
假设T表有 字段A 字段B 时间字段C 现在这样一句sql select t.A,max(t.C) from T t group by T.A 现在 需求是 还要对应求出的max 时间字段c 时 b的值
结构是这样 A max(t.C) B
select A,C,(select B from T t where t.A = K.A AND t.C = K.C) B
from( select t.A A,max(t.C) C from T tgroup by T.A) K
内容拓展:
一、SQL语言,是结构化查询语言(Structured Query Language)的简称。SQL语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
二、SQL语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统可以使用相同的结构化查询语言作为数据输入与管理的接口。SQL语言语句可以嵌套,这使他具有极大的灵活性和强大的功能。
三、SQL 是1986年10 月由美国国家标准局(ANSI)通过的数据库语言美国标准,接着,国际标准化组织(ISO)颁布了SQL正式国际标准。1989年4月,ISO提出了具有完整性特征的SQL89标准,1992年11月又公布了SQL92标准,在此标准中,把数据库分为三个级别:基本集、标准集和完全集。
参考技术A select t1.A ,t1.m ,(select top 1 t2.B from T t2 where t1.A=t2.A and t1.m=t2.C) as B from(select A,max(C) as m from T group by A) t1 参考技术B A与max(C)组合后,值是否唯一?
如果唯一可以这样:
select A,C,(select B from T t where t.A = K.A AND t.C = K.C) B
from
(
select t.A A,max(t.C) C from T t
group by T.A
) K本回答被提问者采纳
postgre 获取分组中的一条数据,最大值或最小值等
使用postgre的窗口函数row_number, 分块后选择需要自己的行
例:获取分组中的最大数据,从table1表中获取以cloumn1字段作为分组,每组中cloum2字段最大的行数据
select *
from(
select * ,row_number() over (partition by colum1 order by cloum2 desc nulls last)order_in_ clomun1 from table1
)as temp
where order_in_ clomun1< 2
↑解释如下:
row_number(): 在其分区中的当前行号,从1计(所以后面的where条件是<2,取出来的就是最大值), 文档地址 http://www.postgres.cn/docs/9.3/functions-window.html
partition by colum1: 根据cloumn1进行分组,在这里不能使用order by
order_in_ clomun1: 分组集合的别名,随便命名,后面的 where 需要用它进行条件判定。
以上是关于sql 分组后求每组中的最大值对应的那条数据的主要内容,如果未能解决你的问题,请参考以下文章
分组问题,32个数分8组,每组中数不能有相同的,请用python编程?