Одна опция использует боковое соединение (не то, что SQL Сервер не поддерживает синтаксис limit
, но вместо этого использует top
):
select t.*, tr.effective_date, tr.tax_percent
from tax_table t
cross apply (
select top (1) *
from tax_rate_table tr
where tr.tax_id = t.tax_id
order by tr.effective_date desc
) tr
Вы также можете присоединиться и фильтровать с помощью коррелированный подзапрос:
select t.*, tr.effective_date, tr.tax_percent
from tax_table t
inner join tax_rate_table tr on tr.tax_id = t.tax_id
where tr.effective_date = (
select max(tr1.effective_date)
from tax_rate_table tr1
where tr1.tax_id = tr.tax_id
)
Или вы можете использовать row_number()
:
select *
from (
select
t.*,
tr.effective_date,
tr.tax_percent,
row_number() over(partition by t.tax_id order by tr.effective_date desc) rn
from tax_table t
inner join tax_rate_table tr on tr.tax_id = t.tax_id
) t
where rn = 1