Я хочу найти новые покупки, сделанные в категории, используя SQL

Пример данных

Мои данные выглядят так, как указано выше.

Я хочу найти клиентов, которые заказывают разные категории во втором заказе, чем в первом. Например. на изображении выше ALFKI заказал категории 1,7,8 в своем первом заказе, то есть 10643, а во втором заказе, то есть 10692, он заказывает категорию 2. Мне нужен список всех таких клиентов. Заранее спасибо.


person super man    schedule 06.02.2018    source источник
comment
Какую систему баз данных вы используете? Вы действительно имеете в виду первый и второй порядок или это означает, что у них есть два разных порядка с непересекающимися порядками?   -  person Radim Bača    schedule 06.02.2018


Ответы (1)


Я думаю, вы хотите что-то в этом роде:

    select distinct tbl1.CustomerID from <table> tbl1
   where 
   (select count(*) from <table> tbl2 where tbl1.CustomerID = tbl2.CustomerID
   and 
   tbl1.OrderID <> tbl2.OrderID) > 1
   AND
   tbl1.CategoryID not in
    (select CategoryID from <table> tbl3
        where tbl3.OrderID < tbl1.OrderID
        and tbl1.CustomerID = tbl3.CustomerID)

Идея здесь (при условии, что я правильно понял, без тестирования - опасно, я знаю) заключается в том, что вы хотите:

  • каждый идентификатор пользователя (только один раз, следовательно, «отличный»)
  • Если имеется более одного заказа (отсюда и выбор счетчика (*) > 1)
  • где категория не находится в предыдущем порядке (выберите ID категории из)

У него есть два коррелированных подзапроса, поэтому в зависимости от размера вашего набора данных он может работать не очень быстро, и я мог неправильно понять ваши требования. Тем не менее, надеюсь, этого достаточно, чтобы вы начали.

Если вы не знаете, как использовать коррелированные подзапросы, попробуйте поискать здесь: Википедия — коррелированный подзапрос

person Rags    schedule 06.02.2018