У меня есть набор подписок, каждый из которых длится 30 дней с момента покупки первого товара в течение периода
PID | Date Purchased | User ID | Owner ID
=======+========================+================+==============
1 | 1/1/2011 | 1 | 1
2 | 2/1/2011 | 1 | 1
3 | 19/1/2011 | 1 | 1
4 | 3/2/2011 | 1 | 1
5 | 5/1/2011 | 2 | 1
6 | 9/2/2011 | 2 | 1
У меня есть таблица с циклом выставления счетов
Owner ID | DATEBEGIN | DATEEND
=========+==================+============
1 | 1/2/2011 | 2/3/2011
Таким образом, для каждого идентификатора владельца мне нужно было бы разделить периоды на 30-дневные интервалы до значения dateend
. Мне нужно подсчитать покупки по уникальным идентификаторам пользователей с первой покупки, а также «забронировать» следующие 30 дней (не считайте в течение этого периода) и посчитать первые после этого.
Так, например, PID (PurchaseID) 1 на 01.01.2011, «записывает» следующие 30 дней, поэтому они игнорируются.
Но это относится к предыдущему расчетному периоду, а остаток переносится в следующий
поэтому 3/30 в первом и 27/30 в следующем (продажи 1.02.2011, 19.01.2011 игнорируются, но 02.03.2011 не зарезервированы, поэтому учитываются)
Owner ID | User ID | PeriodBegin | PeriodEnd | Usage | Comment
===========+===========+=====+===========+===============+=========+================
1 | 1 | 3/12/2010 | 1/1/2011 | 3/30 |
1 | 1 | 2/1/2011 | 1/2/2011 | 27/30 |
1 | 1 | 2/2/2011 | 4/3/2011 | 29/30 |
1 | 1 | 5/3/2011 | 4/4/2011 | 1/30 |
1 | 2 | 2/2/2011 | 4/3/2011 | 25/30 |
1 | 2 | 5/3/2011 | 4/4/2011 | 5/30 |
В конце концов я собираю их в следующие
Owner ID | PeriodBegin | PeriodEnd | Usage |
==========+=================+==============+==========+
1 | 3/12/2010 | 1/1/2011 | 3/30 |
1 | 2/1/2011 | 1/2/2011 | 27/30 |
1 | 2/2/2011 | 4/3/2011 | 54/30 |
1 | 5/3/2011 | 4/4/2011 | 6/30 |
Поэтому я застрял, пытаясь понять, как заставить MySQL игнорировать значения в течение 30 дней с момента первой покупки, а затем подсчитывать их после окончания этого «забронированного» периода.
Чтобы было легче понять, я провел аналогию с mp3-подписками. Первой таблицей могут быть покупки от звукозаписывающей компании дистрибьюторам (у каждого из которых есть свои собственные идентификаторы владельца и несколько учетных записей для каждого конечного пользователя (идентификатор пользователя).
Таким образом, при первой покупке mp3 у них есть 30-дневная подписка на скачивание неограниченного количества mp3. Вторая последняя таблица - это их график выставления счетов. Поэтому несправедливо взимать полную стоимость mp3, если они покупают песню за 1 день до окончания расчетного периода, поэтому ее нужно разделить на части, а остаток взимается в следующем месяце.