[英]SELECT ONE Row with the MAX() value on a column
I have a pretty simple dataset of monthly newsletters: 我有一个非常简单的月度通讯数据集:
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
and etc. 等等。
The PublishDate is unique. PublishDate是独一无二的。
Result (based on above): 结果(基于以上):
id | Name | PublishDate | IsActive
2 | Newsletter 2 | 11/06/2012 | 1
What I want is pretty simple. 我想要的很简单。 I just want the 1 newsletter that IsActive and PublishDate = MAX(PublishDate).
我只想要一份IsActive和PublishDate = MAX(PublishDate)的新闻通讯。
select top 1 * from newsletters where IsActive = 1 order by PublishDate desc
You can use row_number()
: 你可以使用
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
See SQL Fiddle with Demo 请参阅SQL Fiddle with Demo
You can even use a subquery that selects the max()
date: 您甚至可以使用选择
max()
日期的子查询:
select t1.*
from table1 t1
inner join
(
select max(publishdate) pubdate
from table1
where isactive = 1
) t2
on t1.publishdate = t2.pubdate
CREATE TABLE Tmax(Id INT,NAME VARCHAR(15),PublishedDate DATETIME,IsActive BIT)
INSERT INTO Tmax(Id,Name,PublishedDate,IsActive)
VALUES(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)
SELECT * FROM Tmax
SELECT t.Id
,t.NAME
,t.PublishedDate
,t.IsActive
FROM Tmax AS t
WHERE PublishedDate=
(
SELECT TOP 1 MAX(PublishedDate)
FROM Tmax
WHERE IsActive=1
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.