2016-11-25 3 views
-1

У меня есть таблица с двумя столбцами, первый столбец - идентификатор клиента, а второй столбец - это идентификатор элемента (уникальный идентификатор, связанный со всеми элементами, находящимися в хранилище) , Наш набор данных таков, что если клиент в определенный день купит пять предметов, тогда будет пять строк, связанных с одним и тем же идентификатором клиента для пяти элементов, но если в какой-то другой день один и тот же клиент купит 4 пункта, то у нас снова будет 4 строки для тот же идентификатор клиента.Поиск всех записей, связанных с идентификатором клиента, является уникальным

изображение указывает, что клиент с идентификатором 5232 покупает 6 разных товаров в определенный день, а клиент с идентификатором 6543 покупает 4 разных предмета, а клиент с идентификатором 5232 снова в какой-то другой день покупает еще 4 предмета, но два из них того же идентификатора.

enter image description here

что я хочу «чтобы убедиться, что все предметы, купленные определенным клиентом в определенный день все по-другому или нет». Поскольку набор данных довольно большой, поэтому я ищу какой-то SQL-запрос, который может это сделать.

Вывод должен быть:

  • Для клиента идентификатора 5232 в первый день он должен вернуть истинный (все пункты Идентификаторы разные)
  • Для клиентов ид 6543 она также должна возвращать верно.
  • Для идентификатора клиента 5232 в другой день он должен вернуть значение false. (Два элемента имеют тот же идентификатор 342)
+0

http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-so-when-asking-a-question/285557#285557 –

+0

Где поле даты? Итак, первое '342' в порядке, но вы покупаете снова на другой день, а разве нет? –

+0

Нет поля даты. Это похоже на то, что все предметы, купленные определенным клиентом в определенный день, будут непрерывными, и если клиент придет и купит товары снова после некоторого идентификатора клиента, то это считается другим днем. Как и первые 6 строк с 5232, считаются в тот же день, и с разрывом 5232 приходит снова, поэтому считается разным днем. Мое требование состоит в том, чтобы найти, что в определенный день покупаемые покупателем предметы разные. –

ответ

0
SELECT 
    t.CustomerId 
    ,t.Date 
    ,COUNT(DISTINCT t.ItemId) as NumOfItems 
    ,COUNT(DISTINCT t2.ItemId) as NumOfRepeatedItems 
    ,CASE WHEN COUNT(t2.ItemId) > 0 THEN 'false' ELSE 'true' END as UniquePurchases 
FROM 
    Table t 
    LEFT JOIN Table t2 
    ON t.CustomerId = t2.CustomerId 
    AND t.ItemId = t2.ItemId 
    AND t.Date > t2.Date 
GROUP BY 
    t.CustomerId 
    ,t.Date 

Вы можете использовать LEFT SELF JOIN обратно к себе, чтобы увидеть, если тот же клиент купил один и тот же товар на предыдущую дату.

Я предполагаю, что у вас есть возможность добавить столбец даты в запрос, как вы обсуждали дату в своем сообщении. Было бы жизненно важно иметь некоторый способ группировки покупок по дате или общему идентификатору.

+0

нет столбца 'date', OP говорит, что изменение' customer_id' означает другую дату:/ –

+0

@JuanCarlosOropeza, а после повторного чтения я вижу, что вы говорите, я никогда не видел транзакционную систему, у которой не было бы даты для порядок и/или Идентификатор заказа, поэтому, когда я догадался, что ОП опущен, я думаю, что он есть и там. Единственным другим способом было бы создать общий идентификатор группировки путем создания номера строки и определения пробелов, а затем использовать этот идентификатор группировки как общий идентификатор – Matt