Я думаю, что вы хотите:
select p.person_id, max(pe.enc_timestamp) as LastAppt
from patient_encounter pe inner join
person p
on pe.person_id = p.person_id
where pe.enc_timestamp >= '2018-04-05' and
pe.enc_timestamp < '2020-04-06' and
?.billable_ind = 'y' and -- what table is this in ???
p.last_name <> 'ztest'
group by p.person_id
order by p.person_id;
GROUP BY
определяет определение каждой строки в наборе результатов. Это означает, что вы хотите, чтобы по одной строке для каждого отдельного значения person_id
.
Примечания:
- Исправление заключается в удалении метки времени из
GROUP BY
. SELECT DISTINCT
почти никогда не требуется с GROUP BY
. На самом деле, это вообще редко требуется. - Нет причин избыточно дублировать условия
JOIN
в предложении WHERE
. - Псевдонимы таблиц облегчают написание запроса и читать.
- Вы должны квалифицировать все ссылки на столбцы. В какой таблице
billing_ind
в? - Вы можете упростить сравнение дат. В качестве преимущества вы можете думать в днях, а не в миллисекундах.