Я работаю с двумя таблицами в этом запросе Table 1: admit
, Table 2: Billing.
Что я хочу сделать, это показать людям, которые допущены к нашим кризисным услугам (program codes '44282' and '44283')
. Для этих людей я хочу показать свою страховку, которая находится под полем guarantor_id
в таблице фактурирования. Для этого мне нужно показать ВСЕ действительные даты максимального покрытия cov_effective_date
, где дата вступления в силу составляет менее даты приема preadmit_admission_date
, а срок действия покрытия cov_expiration_date
больше, чем дата приема (или является нулем). Код, который у меня есть сейчас, делает все, что я хочу, но не получает всех максимальных сроков действия. Поэтому, если у кого-то было два разных страховки, которые начались в тот же день, он будет показывать только один, и я хочу, чтобы он показывал оба.Выбор ВСЕ МАКС. ВАРИАНТЫ SQL-запрос
Select
A.patid
,A.episode_number
,A.preadmit_admission_date
,A.program_code
,A.program_value
,A.c_date_of_birth
,A.guarantor_id
,max(A.cov_effective_date) as "MaxDate"
from(
Select
SA.patid
,SA.episode_number
,SA.preadmit_admission_date
,SA.program_code
,SA.program_value
,SA.c_date_of_birth
,BGE.guarantor_id
,BGE.cov_effective_date
From System.view_episode_summary_admit as "SA"
Left Outer Join
(Select
BG.patid
,BG.episode_number
,BG.guarantor_id
,BG.cov_effective_date
,BG.cov_expiration_date
from System.billing_guar_emp_data as "BG"
Inner Join
(Select patid, episode_number, preadmit_admission_date
from System.view_episode_summary_admit) as "A"
On
(A.patid = BG.patid) and (A.episode_number = BG.episode_number)
Where
BG.cov_effective_date <= preadmit_admission_date and
(BG.cov_expiration_date >= preadmit_admission_date or
BG.cov_expiration_date Is Null)
) as "BGE"
on
(BGE.patid = SA.patid) and (BGE.episode_number = SA.episode_number)
Where
(program_code = '44282' or program_code = '44283')
and preadmit_admission_date >= {?Start Date}
and preadmit_admission_date <= {?End Date}
) A
Group By Patid, Episode_number
Извините, что вовремя, или это будет полный ответ. Этот запрос не будет работать на большинстве языков SQL и будет вызывать ошибку. При использовании aggreagtes вам нужны все неагрегатные столбцы в группе. MySQL любит пропускать ошибку и произвольно захватывать значения для столбцов, не входящих в группу. Поэтому давайте избавимся от этой совокупности. У вас есть подзапрос вниз ... напишите подзапрос, который получает максимальную дату по вашему ключу, присоедините его к остальной части вашего утверждения и обратитесь к нему оттуда. Если вам нужна дополнительная помощь, у меня будет что-то за пару часов для вас. – Twelfth
@Twelfth Хорошо, спасибо! Я буду работать над этим. – Hound
@Twelfth Я пробовал следовать вашим инструкциям, но мне по-прежнему не удается заставить мой запрос работать. Если у вас еще есть время, я бы с удовольствием посмотрел, что вы придумали! – Hound