#sql #amazon-web-services #amazon-redshift
#sql #amazon-web-services #amazon-redshift
Вопрос:
Если я хочу получить идентификаторы тех, чье предложение истекло:
select ID card
from table
where offer expiry date < current date
Результат приносит идентификаторы: 1 (поскольку срок действия ‘a’ истек), 2 (поскольку срок действия ‘a’, ‘b’ истек)
Если я хочу получить идентификаторы тех, у кого «только» есть предложения с истекшим сроком действия, как я должен написать? Результат должен содержать «только» ID: 2, поскольку все его предложения истекли. TIA
Ответ №1:
Вы можете использовать max()
:
select id_card
from t
group by id_main
having max(expiry_date) < current_date;
Ответ №2:
Вам нужно сделать следующее:-
- найдите разницу в дате между expire_date и current_date
- Суммируйте значения DATEDIFF с ГРУППОЙ ID_Card
- И отрицательный результат означает, что все даты истекли для этой конкретной ID_Card
SELECT ID_Card FROM MAIN
GROUP BY ID_Card
HAVING (COUNT(ID_Card) = COUNT( CASE WHEN datediff(day,offer_expire_date, current_date)<0 THEN 1 END))
Комментарии:
1. Спасибо. Пробовал, но он по-прежнему извлекает идентификаторы с комбинацией активных и просроченных предложений. Как описано в вопросе, я ищу идентификаторы, у которых «только» есть предложения с истекшим сроком действия.
2. Да, я обновил свой запрос. Пожалуйста, проверьте сейчас.