sql分组取最大
‘壹’ sql查询取分组最大值
selectt1.分类,t1.商品名称,table.库存,t1.更新时间
from (
select 分类,商品名称,max(更新时间) 更新时间 from table
group by 分类,商品名称
) t1
inner join table on t1.分类=table.分类 and t1.商品名称=table.商品名称 and t1.更新时间
=table.更新时间
(1)sql分组取最大扩展阅读:
关于SQL最大值查询语句的记录
SELECT
bsnum,
STATE AS FILE_STATE
FROM
FILE_RECORD r
WHERE
STATE =(
SELECT
MAX(STATE)
FROM
FILE_RECORD
WHERE
bsnum = r.bsnum
);
小技巧:有时需要测试sql语法但又觉得创建表麻烦,可以使用创建一个临时表,如下:
select id, count(t.id) from
(
select 1 as id, 2 as age, 'F' as sex from al union
select 2 as id, 2 as age, 'M' as sex from al union
select 3 as id, 3 as age, 'F' as sex from al union
select 4 as id, 4 as age, 'M' as sex from al
)t
‘贰’ sql查询 分组后 每组某字段值最大的一行所有列
按照员工ID分组,取出ID值最大的一行
1、第一个方法,需要考虑ID有重复值的问题,如果最大值存在重复值,那么结果也重复。
SELECT*
FROM员工信息变化表T1
WHEREid=(SELECTMax(id)
FROM员工信息变化表T2
WHERET1.员工ID=T2.员工ID)
2、第二个方法:该语句是在SQL Server中编写的,应该不适用于MySQ和Oracle。排名函数是SQL Server2005中新增的功能,不适用SQL Server 2000
SELECT*
FROM(SELECTrow_number()OVER(PARTITIONBY员工IDORDERBYidDESC)
ASROW_NUM,
*
FROM员工信息变化表)T1
WHEREROW_NUM=1
‘叁’ SQL 分组筛选取标识最大的那一行
假设数据表名为haha,内容如下
id name data
1 ABC 2
2 ABC 3
3 ABC 5
1 DEF 3
2 DEF 4
只允许使用查询,不能使用创建表的语句,结果中name列的值具有唯一性且包含原表中该列所有的值,如果有重复的,只取对应id列的值为最大的。查询结果为
id name data
3 ABC 5
2 DEF 4
以上只是假设,实际数据表大小超过600MB
‘肆’ sql语言 怎么求每组最大,就是用group by 分组后,求每组某列最大
在分组中使用max()函数即可。
例图中表格:
如果是最小,则可以使用 min()函数
‘伍’ 求助sql分组取最大唯一值
select max(aaaa) from (select distinct (值) aaaa from 表名 group by 分组字段) T;
其中distinct()过滤重复值,max()取最大值。
‘陆’ sql如何求分组计数之后计数的最大值
插入测试记录:
[sql] view plain
insertintostudentsvalues('数学','Jack','Tianjin',80)
insertintostudentsvalues('数学','Jordan','Tianjin',80)
insertintostudentsvalues('数学','James','Beijing',55)
insertintostudentsvalues('英语','Jack','Tianjin',90)
insertintostudentsvalues('英语','Jordan','Tianjin',60)
insertintostudentsvalues('英语','James','Beijing',100)
insertintostudentsvalues('语文','Jack','Tianjin',60)
insertintostudentsvalues('语文','Tom','Tianjin',77)
insertintostudentsvalues('语文','Jordan','Tianjin',68)
想要抓取每个科目第一名的整条信息,可以使用Row_number()函数:
select*
from(
selectcourse,stu_name,city,score,ROW_NUMBER()over()asrn
fromstudents
)a
wherea.rn<=1;