2012-12-06 62 views
23

Tôi có một bộ dữ liệu khá đơn giản của bản tin hàng tháng:chọn một dòng với giá trị MAX() trên một cột

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 

và vv

Các PublishDate là duy nhất.

quả (dựa trên trên):

id | Name   | PublishDate | IsActive 
2 | Newsletter 2 | 11/06/2012 |  1 

Những gì tôi muốn là khá đơn giản. Tôi chỉ muốn 1 bản tin IsActive và PublishDate = MAX (PublishDate).

+1

Các câu hỏi tương tự khác dường như đang xử lý các phân vùng dữ liệu và tổng hợp giá trị tối đa trên các phân đoạn đó. Nếu ai đó thấy điều này là TRULY một bản sao hãy đánh dấu nó như vậy. – stevebot

+2

dude xin vui lòng giải thích downvote của bạn. – stevebot

+0

Vì vậy, dựa trên mẫu, bạn muốn trả lại mẫu nào? – Taryn

Trả lời

54
select top 1 * from newsletters where IsActive = 1 order by PublishDate desc 
13

Bạn có thể sử dụng 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 

Xem SQL Fiddle with Demo

Bạn thậm chí có thể sử dụng một subquery đó chọn max() date:

select t1.* 
from table1 t1 
inner join 
(
    select max(publishdate) pubdate 
    from table1 
    where isactive = 1 
) t2 
    on t1.publishdate = t2.pubdate 

Xem SQL Fiddle with Demo

+2

+1 cho Fiddle ... nó giúp tôi hiểu được truy vấn – exexzian

2
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 
    ) 
Các vấn đề liên quan