外部キー、日付、その他のフィールドを含むソース テーブルから最新の行セットを取得しようとしています。データのサンプル セットは次のようになります。
create table #tmp (primaryId int, foreignKeyId int, startDate datetime,
otherfield varchar(50))
insert into #tmp values (1, 1, '1 jan 2010', 'test 1')
insert into #tmp values (2, 1, '1 jan 2011', 'test 2')
insert into #tmp values (3, 2, '1 jan 2013', 'test 3')
insert into #tmp values (4, 2, '1 jan 2012', 'test 4')
取得したいデータの形式は次のとおりです。
foreignKeyId maxStartDate otherfield
------------ ----------------------- -------------------------------------------
1 2011-01-01 00:00:00.000 test 2
2 2013-01-01 00:00:00.000 test 3
foreignKeyId
つまり、最新の開始日と関連するその他のフィールドを表示するのは1 行だけです。これprimaryId
は無関係です。
私は思いついた:
select t.foreignKeyId, t.startDate, t.otherField from #tmp t
inner join (
select foreignKeyId, max(startDate) as maxStartDate
from #tmp
group by foreignKeyId
) s
on t.foreignKeyId = s.foreignKeyId and s.maxStartDate = t.startDate
しかし、(a)これは内部クエリを使用しているため、パフォーマンスの問題が発生する可能性があると思われます。(b)元のテーブルの2つの行に同じforeignKeyId
とがある場合、行が繰り返されますstartDate
。
各外部キーと開始日の最初の一致のみを返すクエリはありますか?