Подсчет от первого пункта, игнорируйте счет в течение следующих 30 дней - PullRequest
1 голос
/ 19 декабря 2011

У меня есть набор подписок, каждый из которых длится 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 день до окончания расчетного периода, поэтому ее нужно разделить на части, а остаток взимается в следующем месяце.

...