У меня есть таблица, которая выглядит примерно так:
customer_id purchase_date category
1 9/1/2018 Electronics
1 9/2/2018 Art
1 9/3/2018 Books
1 9/5/2018 CPG
2 9/2/2018 Books
2 9/4/2018 Electronics
2 9/20/2018 CPG
Отсюда я пытаюсь получить самую последнюю покупку до покупки CPG. Чтобы объяснить дальше, вот мои шаги:
Шаг 1. Создайте таблицу покупок не в категории CPG:
WITH OTHERS AS(
SELECT customer_id,
category as others_category,
purchase_date
FROM orders o
WHERE category IN ('Electronics', 'Books', 'Art')
),
Шаг 2. Создайте таблицу покупок в категории CPG:
CPG AS(
SELECT customer_id,
category as cpg_category,
purchase_date
FROM orders o
WHERE category = 'CPG'
)
Шаг 3. Левое присоединение: вот где я застрял. Я хотел бы создать таблицу, в которой есть последняя покупка ДРУГОЙ до покупки CPG. т.е. результат должен выглядеть так:
others_category count_distinct_customers
Electronics 1
Books 1
В идеале я бы не хотел использовать CTE. Тип SQL - SQL Server 2017.
ROW_NUMBER()
должно легко решить эту проблему. - person Eric   schedule 19.03.2019