質問されたので…
create table [取引開始履歴] ( [取引先] nvarchar(20), [取引先営業所] nvarchar(20), [開始日] date not null ) insert into [取引開始履歴] values (N'Foo財閥', N'大阪', '2016-04-01'), (N'Foo財閥', N'東京第一', '2016-04-01'), (N'Foo財閥', N'東京第二', '2018-07-01'), (N'Bar商社', N'北海道', '2017-10-01'), (N'Bar商社', N'東京', '2018-12-01'), (N'Baz会社', N'京都', '2016-09-01')
こんなデータがあったとして、
取引先の中で最初に取引を始めた営業所を取得したいというお題。
普通は 取引先毎の開始日が min の物でいいけど、min(開始日) が同じのあったらどうするの?
っていう質問。
rank 使って順位付けしましょうねーって感じです。
同じ時どっち取るかは好きな並び順指定してください。
※今回は取引先営業所の昇順にしてます。
select [取引先] , [取引先営業所] , [開始日] from ( select [取引先] , [取引先営業所] , [開始日] , rank() over (partition by [取引先] order by [開始日], [取引先営業所]) as [r] from [取引開始履歴] ) [data_] where [r] = 1
SQL Server で試してますが、Window 関数がサポートされてたらほぼ同じクエリでいけるんちゃうかなー。