sql oracle - "Вывести фамилию и имя читателей, держащих книги более 4-х месяцев"
select p_name, s_name
from reader
join card on user_id
where return_date-issue_date>4
group by p_name, s_name
Подсказывают, что Join написан неверно. Группировка мол в таком запросе не нужна (используется в паре с агрегатными функциями) и что если нужно, то лучше использовать distinct
Ответы (2 шт):
Автор решения: versetty777
→ Ссылка
SELECT reader.p_name, reader.s_name
FROM reader
JOIN card ON reader.user_id = card.user_id
WHERE card.return_date - card.issue_date > 4
GROUP BY reader.p_name, reader.s_name;
Автор решения: Arkee
→ Ссылка
Схема таблиц и примерное содержимое неизвестно. Насколько я понял, будет примерно так:
SELECT
r.P_NAME,
r.S_NAME
FROM
card c
INNER JOIN reader r ON r.User_ID = c.User_ID
WHERE
MONTHS_BETWEEN(NVL(c.RETURN_DATE, CURRENT_DATE), c.ISSUE_DATE) < 4;
Как отметил Akina надо использовать метод MONTH_BETWEEN(date1, date2), чтобы подсчитывать разницу именно по месяцам. Также следует заранее предположить, что читатель может вообще не вернуть книгу. Cоответственно, нужна замена NULL на текущую дату для поля RETURN_DATE.