----------------------------------------------
--有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查询语句即把刚插入的合同日期最大的那条数据显示出来