У нас есть таблица с обновлениями статуса для подписок на продукт. Запись начинается в таблице, когда начинается подписка, и эта запись обновляется с указанием даты окончания, когда заканчивается подписка. Одна из наших систем (не знаю, какая именно) иногда выполняет «отбрасывание \ добавление в тот же день», когда она заканчивает подписку, а затем начинает ее снова (создавая новую запись). Таким образом, один и тот же идентификатор подписчика прикрепляется к нескольким записям, хотя в действительности ничего не изменилось.
Пример данных будет таким:
recID subID start end prodtype
1 19 01/11/2001 01/15/2001 A
2 19 01/15/2001 01/16/2001 A
3 19 01/16/2001 01/20/2001 A
4 19 01/30/2001 01/31/2001 A
Этот парень начал 1/11 и закончил 1/20. Записи 2 и 3 были введены системой (добавление в тот же день, но на самом деле это не так). Запись 4 - это еще одна подписка, которую г-н 19 начал позже.
У меня есть некоторый код, который будет пытаться разрешить только первую (реальную) запись каждой отдельной подписки, но он не может найти реальную дату окончания без использования max () и группировки по подписчику. Это, конечно, показало бы две подписки, 1/11 - 1/31 и 1/30 - 1/31, что неправильно.
Я рву свои волосы, пытаясь разрешить этот паттерн до двух таких записей:
subID start end prodtype
19 01/11/2001 01/20/2001 A
19 01/30/2001 01/31/2001 A
Это в Teradata, но я считаю, что это просто ANSI SQL.