Ситуация:
Мне нужно добавить два флага столбца, обозначенных так:
- Независимо от того, выбрал ли человек то же самое продукт до даты покупки.
- Независимо от того, приобрел ли человек любой другой продукт до даты покупки.
Выходные данные должны иметь 5 столбцов:
- Электронная почта
- ProductName
- Дата покупки
- SameProduct (0 = Нет, 1 = Да)
- AnyProduct (0 = Нет, 1 = Да)
Необработанные данные выглядят так:
abc@gmail.com cucumber 01-02-2019
abc@gmail.com orange 04-02-2019
abc@gmail.com grapefruit 15-02-2019
cde@gmail.com blackberry 06-02-2019
cde@gmail.com lime 15-02-2019
cde@gmail.com lime 20-02-2019
zzz@gmail.com apple 02-02-2019
zzz@gmail.com apple 18-02-2019
zzz@gmail.com orange 19-02-2019
zzz@gmail.com apple 28-02-2019
Цель:
И мой вывод будет выглядеть так:
Email ProductName DatePurchased SameProduct AnyProduct
abc@gmail.com cucumber 01-02-2019 0 0
abc@gmail.com orange 04-02-2019 0 1
abc@gmail.com grapefruit 15-02-2019 0 1
cde@gmail.com blackberry 06-02-2019 0 0
cde@gmail.com lime 15-02-2019 0 1
cde@gmail.com lime 20-02-2019 1 1
zzz@gmail.com apple 02-02-2019 0 0
zzz@gmail.com apple 18-02-2019 1 1
zzz@gmail.com orange 19-02-2019 0 1
zzz@gmail.com apple 28-02-2019 1 1
То, что я пытался: я пытался дважды объединиться и использовать операторы case, но я чувствую, что этот путь крайне неэффективен.
Фиктивные данные:
create table #table1 (email varchar(20), productname varchar(20), datepurchased date)
insert into #table1 values
('abc@gmail.com','cucumber','2019-02-01'),
('abc@gmail.com','orange','2019-02-04'),
('abc@gmail.com','grapefruit','2019-02-15'),
('cde@gmail.com','blackberry','2019-02-06'),
('cde@gmail.com','lime','2019-02-15'),
('cde@gmail.com','lime','2019-02-20'),
('zzz@gmail.com','apple','2019-02-02'),
('zzz@gmail.com','apple','2019-02-18'),
('zzz@gmail.com','orange','2019-02-19'),
('zzz@gmail.com','apple','2019-02-28')
Примечание: Мои фактические данные содержат более 100 миллионов строк.Я не уверен, какой тип запроса сделает обработку данных максимально быстрой.