使用列上的MAX()值选择一行

ste*_*bot 23 sql t-sql sql-server

我有一个非常简单的月度通讯数据集:

id  | Name          | PublishDate   | IsActive
1   |  Newsletter 1 | 10/15/2012    |     1
2   |  Newsletter 2 | 11/06/2012    |     1  
3   |  Newsletter 3 | 12/15/2012    |     0
4   |  Newsletter 4 | 1/19/2012     |     0
Run Code Online (Sandbox Code Playgroud)

等等.

PublishDate是独一无二的.

结果(基于以上):

id  | Name          | PublishDate   | IsActive
2   |  Newsletter 2 | 11/06/2012    |     1  
Run Code Online (Sandbox Code Playgroud)

我想要的很简单.我只想要一份IsActive和PublishDate = MAX(PublishDate)的新闻通讯.

Ada*_*son 56

select top 1 * from newsletters where IsActive = 1 order by PublishDate desc
Run Code Online (Sandbox Code Playgroud)


Tar*_*ryn 15

你可以使用row_number():

select id, name, publishdate, isactive
from
(
  select id, name, publishdate, isactive,
    row_number() over(order by publishdate desc) rn
  from table1
  where isactive = 1
) src
where rn = 1
Run Code Online (Sandbox Code Playgroud)

请参阅SQL Fiddle with Demo

您甚至可以使用选择max()日期的子查询:

select t1.*
from table1 t1
inner join
(
  select max(publishdate) pubdate
  from table1
  where isactive = 1
) t2
  on t1.publishdate = t2.pubdate
Run Code Online (Sandbox Code Playgroud)

请参阅SQL Fiddle with Demo

  • 为小提琴+1 ...它帮助我理解了查询 (2认同)