Для решения задачи по SQL необходимо выполнить следующие шаги:
- Вывести ФИО, действующий адрес и почтовый индекс граждан. Адрес является действующим, если дата выписки не установлена, а дата прописки максимальная. При наличии нескольких действующих адресов брать наиболее актуальный (с максимальным id прописки).
- Сделать запрос параметризуемым в зависимости от значения p_mode:
- p_mode=1: организовать поиск граждан с действующим местом жительства на текущий момент.
- p_mode=0: вывести всех граждан (вне зависимости от того указан ли у них действующий адрес).
- p_mode=-1: организовать поиск граждан без определенного места жительства.
Для выполнения первого шага запроса можно использовать следующий код:
SELECT citizens.FIO, addresses.address, addresses.postal_code
FROM citizens
JOIN addresses ON citizens.id = addresses.citizen_id
WHERE addresses.checkout_date IS NULL
AND addresses.registration_date = (
SELECT MAX(registration_date)
FROM addresses
WHERE citizen_id = citizens.id
AND checkout_date IS NULL
)
Для выполнения второго шага запроса можно использовать следующий код:
DECLARE @p_mode INT
SET @p_mode = 1 -- здесь можно задать значение p_mode
SELECT citizens.FIO, addresses.address, addresses.postal_code
FROM citizens
JOIN addresses ON citizens.id = addresses.citizen_id
WHERE (@p_mode = 0 OR addresses.checkout_date IS NULL)
OR (@p_mode = 1 AND addresses.checkout_date IS NULL)
OR (@p_mode = -1 AND addresses.checkout_date IS NOT NULL)
AND addresses.registration_date = (
SELECT MAX(registration_date)
FROM addresses
WHERE citizen_id = citizens.id
AND (@p_mode = 0 OR checkout_date IS NULL)
)
Обратите внимание, что в запросе используется оператор OR для проверки значения p_mode. Также в запросе используется параметр @p_mode, который можно задать перед выполнением запроса.
Запрос сделать параметризуемым – в зависимости от значения p_mode:
p_mode=1 организовать поиск граждан с действующим местом жительства на текущий момент
p_mode=0 вывести всех граждан (вне зависимости от того указан ли у них действующий адрес)
p_mode=-1 организовать поиск граждан без определенного места жительства