SQL であるグループの中で最小のものを取得する (複数あっても1つにしたい)

質問されたので…

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

f:id:odashinsuke:20190605054951j:plain
SQL Server で試してますが、Window 関数がサポートされてたらほぼ同じクエリでいけるんちゃうかなー。