#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