список клиентов ВКЛЮЧЕН, а НЕ ВКЛЮЧЕН

#sql

#sql

Вопрос:

как получить номер клиента, который подпадал под категорию до 7/31, но не попал в 8/1?

 select customer_number
from table 
where
purchased = 'a'
and date = '07-31-2020'
  

Предположим, у меня есть данные до 8/31/2020.

Я хочу получить список номеров клиентов, которые приобрели ‘a’ до 7/31, но не приобрели после этого

Комментарии:

1. Обычно вам нужны даты ISO 8601 , как в YYYY-MM-DD , хотя бы для того, чтобы их можно было отсортировать.

2. Образцы данных и желаемые результаты действительно помогли бы. Вам нужен клиент, если последняя покупка приходится на 2020-07-30? Что, если клиент приобрел что-то другое после вашей даты? Ваш вопрос не ясен.

Ответ №1:

Вы можете попробовать следующее —

 select customer_number 
from table where purchased = 'a' 
group by customer_number
having max(date)='07-31-2020'
  

Комментарии:

1. Спасибо за ваш ответ. Существует другой вариант. как получить номер клиента, который подпадал под категорию до 8/1, но не на 8/31?

2. @user14263992 помогло ли это вам?

3. будет ли это правильной логикой для варианта? выберите customer_number из таблицы, в которой purchased = ‘a’ группируется по customer_number, имеющему max (date) =’08-1-2020′

4. @user14263992, да, кажется, так

5. Исходя из вашей логики, кто купил ‘a’ до 7/31 , это должно быть having max(date) <= date '2020-07-31'

Ответ №2:

Я бы использовал условие NOT EXISTS:

 select t1.*
from the_table t1
where purchased = 'a'
and not exists (select *
                from the_table t2
                where t2.customer_number = t1.customer_number
                  and t2.date > date '2020-07-31');