2011-06-24 161 views
0

選擇最新的評論我有一個表像這樣:SQL SERVER:使用max日期

標識,評論,LastUpdatedDate

我tyring選擇該ID的最新評論。該表可以有不同日期的ID的許多評論,但我試圖從那裏得到最新的日期。我試過以下沒有成功:

SELECT tt.* 
    FROM tagtestresultcomment tt 
INNER JOIN 
(
SELECT tag_id, MAX(last_update) AS MaxDateTime 
FROM tagtestresultcomment 
GROUP BY tag_id 
) groupedtt ON tt.tag_id = groupedtt.tag_id AND tt.last_update = groupedtt.MaxDateTime 
order by tag_id 

有沒有人有任何想法如何實現這一目標?

謝謝!

回答

1

您的查詢代碼過於冗餘。第一

tt.tag_id = groupedtt.tag_id AND tt.last_update = groupedtt.MaxDateTime 

這是不夠的只是

tt.tag_id = groupedtt.tag_id 

和第二,這足以只是

SELECT [desired field list extcept last_update and ], 
    tag_id, 
    MAX(last_update) AS MaxDateTime 
FROM 
    tagtestresultcomment 
group by 
tag_id, [desired field list extcept last_update and tag_id] 

在所有實現自己的目標

+0

如果你有選擇tag_id你必須將它包含在組條件 – niktrs

+0

你是對的,更新 – heximal

+0

你可以有最大日期的id。但是評論呢?在這種情況下,你需要一個嵌套查詢或類似的東西,不能避免它 – niktrs

2

試試這個

Select * from tagtestresultcomment where last_update in 
(select max(last_update) from tagtestresultcomment group by tag_id) 
+0

一個不錯的選擇加入 – niktrs

+0

但如果2條評論針對不同TAG_ID的具有相同的last_update值,那麼兩者都將被返回 - 即使對於其中一個評論,它實際上並不是最新的評論。 – AdaTheDev

+0

這將是,如果他只存儲沒有時間的日期 – Binil

1

這聽起來像你只想要最新評論每個 tag_id?在這種情況下,這裏是一個方法,您可以從SQL 2005使用和:

;WITH CTE AS 
(
SELECT *, 
    ROW_NUMBER() OVER(PARTITION BY tag_id ORDER BY last_update DESC) AS RowNo 
FROM TagTestResultComment 
) 

SELECT * FROM CTE WHERE RowNo = 1 
0

我已經試過這樣的事情:

declare @tagtestresultcomment table 
(
id int 
, comment varchar(50) 
,LastUpdatedDate datetime 
) 

--==== Populate table 

insert into @tagtestresultcomment(id,comment,LastUpdatedDate) 

select 1,'My name is Arthur','2011-06-09 00:00:00' union all 

select 2,'My name is DW','2011-06-19 00:00:00' union all 

select 2,'Arthur is my brother','2011-06-21 00:00:00' union all 

select 1,'I have a sister named DW','2011-06-21 00:00:00' union all 

select 3,'I am Muffy','2011-06-14 00:00:00' union all 

select 3,'I like sports','2011-06-14 00:00:00' 

-- SELECT stmt 

select * from @tagtestresultcomment t 
join 
(
select id, MAX(lastupdateddate) as LastUpdatedDate from @tagtestresultcomment group by id 
) m 

on t.id = m.id 

and t.LastUpdatedDate = m.LastUpdatedDate