2013-11-22 42 views
2

我有如下表(表稱爲帖):獲取最後一個不同的行?

id datecreated     threadid 
1 2013-03-17 17:36:12.9281661 1 
2 2013-03-17 17:56:18.3472836 1 
3 2013-03-18 07:09:08.2733381 2 
4 2013-03-18 07:35:58.1251661 3 
5 2013-03-18 22:04:41.6053307 3 
6 2013-03-19 03:30:56.0803165 3 
7 2013-03-19 16:26:59.1518276 4 
8 2013-03-19 16:27:47.4339124 4 
9 2013-03-19 16:28:13.3455579 4 
10 2013-03-19 16:55:16.3930089 5 

我希望查詢只返回where線程列出三次行,但我希望每個線程ID只有單排,它需要是最後一個(按日期排序)。

我該怎麼做?

回答

4
select p.* 
from posts p 
inner join 
(
    select threadid, max(datecreated) maxdate 
    from posts 
    group by threadid 
    having count(*) = 3 
) x on x.threadid = p.threadid and x.maxdate = p.datecreated 
4

您可以使用排序功能:

WITH CTE AS 
(
    SELECT id, datecreated, threadid, 
     TotalCount = COUNT(*) OVER (PARTITION BY threadid), 
     RN = ROW_NUMBER()  OVER (PARTITION BY threadid 
            ORDER BY datecreated DESC) 
    FROM dbo.Posts 
) 
SELECT id, datecreated, threadid 
FROM CTE 
WHERE TotalCount = 3 AND RN = 1 

Sql-Fiddle