Единица измерения - hmy, scode, hProperty
InsurancePolicy - hmy, hUnit, dtEffective, sStatus
Select MAX(i2.dtEffective) as maxdate, u.hMy, MAX(i2.hmy) as InsuranceId,
i2.sStatus
from unit u
left join InsurancePolicy i2 on i2.hUnit = u.hMy
and i2.sStatus in ('Active', 'Cancelled', 'Expired')
where u.hProperty = 2
Group By u.hmy, i2.sStatus
order by u.hmy
Этот запрос вернет значения для страхового полиса с последней датой вступления в силу (Max(dtEffective)
). Я добавил Max(i2.hmy)
, поэтому, если на последнюю дату вступления в силу было более одного страхового полиса, он вернет в базу данных тот, у кого самый высокий идентификатор (i2.hmy
).
Предположим, что было подразделение, к которому были прикреплены 3 страховых полиса с одной и той же последней датой вступления в силу, и у всех был разный статус sStatus '.
Результат будет выглядеть так:
maxdate UnitID InsuranceID sStatus
1/23/12 2949 1938 'Active'
1/23/12 2949 2343 'Cancelled'
1/23/12 2949 4323 'Expired'
Как отфильтровать результаты, чтобы при наличии нескольких страховых полисов с различным статусом для одной и той же единицы и на одну и ту же дату сначала мы выбирали страховой полис со статусом 'Active'
, если его не существует, выберите 'Cancelled'
, а если этого не существует, выберите 'Expired'
.