У меня есть Payment
таблица, которая выглядит примерно так:
Id (int identity)
CustomerId (int)
PaymentDate (SmallDateTime)
Теперь я хочу написать запрос, который найдет тех клиентов, которые произвели три платежа в течение трех месяцев. Учитывая следующие данные:
Id CustomerId PaymentDate (YYYY-MM-DD)
------------------------------------------
1 1 2010-01-01
2 1 2010-02-01
3 1 2010-03-01
4 1 2010-06-01
5 2 2010-04-01
6 2 2010-05-01
7 2 2010-06-01
8 2 2010-07-01
Я бы хотел получить следующий результат:
CustomerId LastPaymentDateInPeriod
-------------------------------------
1 2010-03-01
2 2010-07-01
Где LastPaymentDateInPeriod
- это PaymentDate
с наибольшим значением в течение трехмесячного периода. Если для данного клиента существует более одного трехмесячного периода, он должен будет вернуть наибольшее значение за последний период (это то, что я пытался проиллюстрировать для клиента 2 в приведенном выше примере). Примечание , что три платежа в течение трех последовательных дней также будут соответствовать критериям. Платежи просто должны упасть в течение трехмесячного периода.
Я знаю, как сделать это с помощью курсора и множества небольших запросов, но это медленно (и, как я понял, должно быть только последним средством). Так кто-нибудь из вас, гениев SqlServer, знает, как сделать это с помощью запроса?
Заранее спасибо.