Условие фильтра SQL: поиск идентификаторов, у которых есть только предложения с истекшим сроком действия

#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:

Вам нужно сделать следующее:-

  1. найдите разницу в дате между expire_date и current_date
  2. Суммируйте значения DATEDIFF с ГРУППОЙ ID_Card
  3. И отрицательный результат означает, что все даты истекли для этой конкретной 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. Да, я обновил свой запрос. Пожалуйста, проверьте сейчас.