Я пытаюсь удалить дубликаты, одновременно получая максимальный результат. Я не могу удалить дубликаты - PullRequest
0 голосов
/ 06 апреля 2020
select distinct person.person_id, MAX(patient_encounter.enc_timestamp) as LastAppt 

from patient_encounter inner join person on patient_encounter.person_id = person.person_id
where enc_timestamp between '2018-04-05 00:00:00.000' and '2020-04-05 23:59:59.999' 
      and patient_encounter.person_id = person.person_id
      and billable_ind = 'y' and person.last_name <> 'ztest'
group by person.person_id, patient_encounter.enc_timestamp
order by person.person_id

1 Ответ

0 голосов
/ 06 апреля 2020

Я думаю, что вы хотите:

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 в?
  • Вы можете упростить сравнение дат. В качестве преимущества вы можете думать в днях, а не в миллисекундах.
...