У меня есть две таблицы: «addToCart» и «order2»:
addToCart - пользователи, которые добавили продукт в корзину
заказ - пользователи, которые купили продукт
В обеих таблицах у меня также есть категория продукта.
AddToCart
UserID ProductCategory Date
-----------------------------------
001id ProductCategory1 02/24/2020 10:00 AM
001id ProductCategory2 02/24/2020 11:00 AM
001id ProductCategory2 02/24/2020 11:40 AM
001id ProductCategory3 02/24/2020 12:40 PM
Order2
UserID ProductCategory Date
-----------------------------------
001id ProductCategory1 02/24/2020 11:00 AM
001id ProductCategory2 02/24/2020 11:30 AM
Мне нужно чтобы получить пользователей, которые отказались от корзины в каждой категории товаров. Чтобы добиться этого, я смотрю на пользователей, которые добавили в корзину, а не сгенерировали заказ или последняя addToCart для одной ProductCategory старше, чем заказ для той же ProductCategory.
Итак, каждый день я запускаю этот запрос:
select
added.UserID,
added.ProductCategory,
max(added.[Date]) as addedDate
from addTocart added
left join order2 ord
on added.UserID = ord.UserID
and added.ProductCategory = ord.ProductCategory
group by added.UserID, added.ProductCategory
having max(added.[Date]) > max(ord.[Date])
Насколько я знаю, если я сделаю левое соединение между таблицей A и таблицей B (on A.id = B.id
), я могу вывести строки из таблицы A, которые не имеют совпадений в таблице B.
Но когда я запускаю этот запрос с двумя параметрами в предложении on, id001 для ProductCategory3 не возвращается. Может ли кто-нибудь помочь определить, почему и почему я могу вернуть контакты, которые добавили в корзину какую-либо товарную категорию, но не заказали эту товарную категорию?