最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
SQL分组取指定字段最大值的记录
时间:2015-04-10 编辑:简简单单 来源:一聚教程网
----------------------------------------------
--有id,name,createDate的一张表testTable
--根据name分组,获取每组中createDate最大的那条记录(整条)查询出来
----------------------------------------------
创建一张表,语句如下:
CREATE TABLE [dbo].[testTable]
(
[id] [int] NOT NULL IDENTITY(1, 1),
[name] [nchar] (10) COLLATE Chinese_PRC_CI_AS NULL,
[counts] [int] NULL,
[createDate] [datetime] NULL
)
GO
-- Constraints and Indexes
ALTER TABLE [dbo].[testTable] ADD CONSTRAINT [PK_testTable] PRIMARY KEY CLUSTERED ([id])
GO
插入测试数据:
insert into testTable(id,name,counts,createDate) values(1,'A ',20,'01 14 2011 10:52PM')
insert into testTable(id,name,counts,createDate) values(2,'A ',10,'02 14 2011 10:52PM')
insert into testTable(id,name,counts,createDate) values(3,'B ',20,'03 14 2011 10:52PM')
insert into testTable(id,name,counts,createDate) values(4,'B ',40,'04 14 2011 10:52PM')
insert into testTable(id,name,counts,createDate) values(5,'B ',10,'05 14 2011 10:52PM')
insert into testTable(id,name,counts,createDate) values(6,'C ',20,'06 14 2011 10:52PM')
insert into testTable(id,name,counts,createDate) values(7,'C ',40,'07 14 2011 10:52PM')
查询SQL语句:
select * from (
select id,name,counts,createDate,row_number() over(partition by name order by createDate desc) rn
from testTable
) t where t.rn <=1
效果如下
例子2
编号 姓名 合同日期
100 张三 1985-5-1
100 张三 1986-5-1
101 李四 1985-5-1
101 李四 1999-5-1
求以编号分组查出合同日期的最大值记录.结果就应该是
100 张三 1986-5-1
101 李四 1999-5-1
请写出最简单效率最高的SQL查询语句.试用成功后加分
select 编号,姓名,max(合同日期)
from table
group by 编号,姓名
order by 合同日期;
--测试数据:
SQL> select * from a;
NO NAME HT
---------- -------------------- -----------
SQL> select * from a;
NO NAME HT
---------- -------------------- -----------
100 张三 1985-5-1
100 张三 1986-5-1
101 李四 1985-5-1
101 李四 1999-5-1
SQL>
SQL> select no,name,max(ht)
2 from a
3 group by no,name
4 ;
NO NAME MAX(HT)
---------- -------------------- -----------
100 张三 1986-5-1
101 李四 1999-5-1
SQL> insert into a values(100,'张三',to_date('1999-5-1','yyyy-mm-dd'));
1 row inserted
SQL> select * from a;
NO NAME HT
---------- -------------------- -----------
100 张三 1985-5-1
100 张三 1986-5-1
101 李四 1985-5-1
101 李四 1999-5-1
100 张三 1999-5-1
SQL>
SQL> select no,name,max(ht)
2 from a
3 group by no,name;
NO NAME MAX(HT)
---------- -------------------- -----------
100 张三 1999-5-1
101 李四 1999-5-1
新插入了一条数据之后,使用该sql查询语句即把刚插入的合同日期最大的那条数据显示出来
相关文章
- MySQL登录、访问及退出操作解析 10-18
- sql语句 update字段null不能用is null问题解析 09-28
- SQL Server ISNULL 不生效原因及解决分析 09-28
- 关于if exists的用法及说明分析 09-28
- Access数据库日常维护方法 09-28
- Oracle 删除大量表记录操作介绍 09-27