Присоединение только к максимальной дате

#sql #join #max

#sql #Присоединиться #макс

Вопрос:

У меня так много проблем с этим, и я не уверен, почему. Мне нужно присоединиться к таблице кодов ставок, но только для получения кода ставки из этой таблицы для каждого участника с максимальной датой eff (в таблице есть несколько кодов ставок для каждого участника, но мне нужен только тот, у которого есть max (effdate)).

 select distinct ek.memid, rs.ratecode, rs.description, rs.effdate 
from enrollkeys ek
inner join ratesuffix rs
on ek.ratecode = rs.ratecode
 

Как мне добавить логику, чтобы видеть только ratecodes, перечисленные для каждого участника с max(effdate)? Поэтому, если у участника было 4 ratecodes, я хочу видеть только те, у которых самый высокий effdate.

Ответ №1:

 WHERE rs.effdate = (SELECT MAX(effdate) FROM ratesuffix r
     WHERE rs.ratecode = r.ratecode)
 

Комментарии:

1. Хм, я получаю такое же точное количество строк с добавлением предложения where или без него. Так расстраивает.

2. Для лучшего ответа потребуются некоторые образцы данных и структуры таблиц.

3. memid ratecode effdate QMZM00000373189 02ADT 2013-02-01 00:00:00 QMZM00000373189 12ADT 2016-02-01 00:00:00 У этого участника есть два кода скорости. Я хочу видеть только один из ‘2016-02-01. Предложение where, похоже, извлекает только код скорости с высокой датой eff независимо от каждого участника. Я думаю, мне нужна группа by.

Ответ №2:

Понял … извините за ужасный вопрос

 Select distinct ek.memid, max_date, rs.ratecode
from enrollkeys ek
left join ratesuffix rs
on ek.ratecode = rs.ratecode
inner join 
(SELECT ek.memid, MAX(rs.effdate) as max_date
from enrollkeys ek
left join ratesuffix rs
on ek.ratecode = rs.ratecode
GROUP BY ek.memid
)a
on a.memid = ek.memid
and a.max_date = rs.effdate