采用sql over()方法获取最大值的记录

以下是摘自一位博友的文章:

–有id,name,createDate的一张表testTable
–根据name分组,获取每组中createDate最大的那条记录(整条)查询出来
———————————————-

创建一张表,语句如下:

  1. CREATE TABLE [dbo].[testTable]
  2. (
  3. [id] [intNOT NULL IDENTITY(1, 1),
  4. [name] [nchar] (10) COLLATE Chinese_PRC_CI_AS NULL,
  5. [counts] [intNULL,
  6. [createDate] [datetime] NULL
  7. )
  8. GO
  9. — Constraints and Indexes
  10. ALTER TABLE [dbo].[testTable] ADD CONSTRAINT [PK_testTable] PRIMARY KEY CLUSTERED ([id])
  11. GO

插入测试数据:

  1. insert into testTable(id,name,counts,createDate) values(1,‘A         ‘,20,’01 14 2011 10:52PM’)
  2. insert into testTable(id,name,counts,createDate) values(2,‘A         ‘,10,’02 14 2011 10:52PM’)
  3. insert into testTable(id,name,counts,createDate) values(3,‘B         ‘,20,’03 14 2011 10:52PM’)
  4. insert into testTable(id,name,counts,createDate) values(4,‘B         ‘,40,’04 14 2011 10:52PM’)
  5. insert into testTable(id,name,counts,createDate) values(5,‘B         ‘,10,’05 14 2011 10:52PM’)
  6. insert into testTable(id,name,counts,createDate) values(6,‘C         ‘,20,’06 14 2011 10:52PM’)
  7. insert into testTable(id,name,counts,createDate) values(7,‘C         ‘,40,’07 14 2011 10:52PM’)

haoitsoft|好IT软件|天空之雄鹰

查询SQL语句

  1. select * from (
  2.  select id,name,counts,createDate,row_number() over(partition by name order by createDate desc) rn
  3.  from testTable
  4. ) t where t.rn <=1

结果如下:

haoitsoft|好IT软件|天空之雄鹰


1 星2 星3 星4 星5 星 (还没评价)
Loading...

发表评论