당신이 요구하는지 무엇을 할 수있는 몇 가지 방법이 있습니다. 이와 같은 작업을 수행하기 위해 파생 테이블을 사용합니다. SQL Server 2005를 사용하는 경우 Common Table Expression으로이 작업을 수행 할 수 있습니다.
본질적으로 주제 ID와 MAX (날짜)가있는 테이블을 만들고 그 테이블에 합류합니다.
스크립트 예 :
If (object_ID('Posts') is not null) drop table Posts
If (object_ID('Topics') is not null) drop table Topics
GO
create table Topics (
TopicID int identity(1,1) primary key,
TopicName varchar(100))
go
Create Table Posts (
PostID int identity(1,1) primary key,
TopicID int references Topics,
Title varchar(100),
PostDate datetime)
GO
Insert into Topics(TopicName) Values ('Math')
Insert into Topics(TopicName) Values ('English')
Insert into Topics(TopicName) Values ('Other')
Insert into Posts(TopicID, Title, PostDate) values (1, 'On numbers 1', GETDATE()-7)
Insert into Posts(TopicID, Title, PostDate) values (1, 'On numbers 2', GETDATE()-2)
Insert into Posts(TopicID, Title, PostDate) values (2, 'On words 1', GETDATE()-4)
Insert into Posts(TopicID, Title, PostDate) values (2, 'On words 2', GETDATE())
Insert into Posts(TopicID, Title, PostDate) values (3, 'WTF? 1', GETDATE()-3)
Insert into Posts(TopicID, Title, PostDate) values (3, 'WTF? 2', GETDATE()-1)
GO
--Derived table
Select TopicName, LastPostDate from Topics T
Inner join (Select TopicID, MAX(PostDate) as LastPostDate
from Posts P
group by TopicID) as LastPostTable
on T.TopicID=LastPostTable.TopicID
order by LastPostDate desc;
--CTE (SQL Server 2005+)
With CTE_LastPostTable (TopicID, LastPostDate)
as
(Select TopicID, MAX(PostDate) as LastPostDate
from Posts P
group by TopicID)
Select TopicName, LastPostDate=coalesce(LastPostDate, '1899-01-01') from Topics T
Left outer join CTE_LastPostTable CTE
on T.TopicID=CTE.TopicID
order by LastPostDate desc
당신은 왼쪽 외부 조인과 함께 내부 조인 전환 할 수 있으며 날짜 열 주위에 병합은 아직 게시물이하지 않는 주제를 캡처 할 수 있습니다.
With CTE_LastPostTable (TopicID, LastPostDate)
as
(Select TopicID, MAX(PostDate) as LastPostDate
from Posts P
group by TopicID)
Select TopicName, LastPostDate=coalesce(LastPostDate, '1899-01-01') from Topics T
Left outer join CTE_LastPostTable CTE
on T.TopicID=CTE.TopicID
order by LastPostDate desc
당신은 그들이 때문에 인덱싱 된 뷰는이를 위해 좋은입니다 등 포럼 당 최신 포스트/스레드를 유지하기 위해 인덱싱 된 뷰 같은 것을 사용하는 것이 좋습니다 포럼 유사 대부분의 웹 앱의 크리스
x = 스레드의 게시 횟수. 모든 스레드를 x 번 반환합니다. –
방금 편집 한 것을 보았습니다. – anishMarokey