Emir Posted December 20, 2006 Share Posted December 20, 2006 Hello,Basically, I am dealing with a database that has customer [b]subscriptions[/b] to [b]services[/b]. each [b]subscription[/b] has a [u]due date[/u] for their next payment. Each [b]service[/b] has a monthly [u]occurence[/u] field that contains a number for what the payment interval is (1 is monthly, 3 is quarterly, 12 is yearly, etc), and it also the has the payment [u]amount[/u] for each [b]service[/b].The problem I am having is that I can't figure out how to forecast the data correctly. I can create a query perfectly fine that lets me see [i][b]by month[/b][/i], how much would be due [i]currently[/i]; however, I cannot, for the life of me, figure out how I can forecast the data: I need the [u]amount[/u] for a [u]due date[/u] in January to also be added to also be added to the total in April, for example.Basically the report that I want generated would appear like this:[table][tr][td]MONTH NAME[/td][td]TOTAL DUE[/td][/tr][tr][td]January[/td][td]2314.00[/td][/tr][tr][td]February[/td][td]3251.00[/td][/tr][tr][td]March[/td][td]4251.00[/td][/tr][tr][td]And so on for a whole year[/td][/tr][/table]I can get this report to generate just fine with the current [u]due dates[/u], but I somehow need to be able to forecast the next payments into the proper months. A quarterly payment that has a [u]due date[/u] in January, needs to also be added to April, July, and October's totals.If someone could help me from ripping my hair out, I would appreciated it GREATLY! Is this even possible?Thank you,Emir Link to comment https://forums.phpfreaks.com/topic/31329-forecastestimate-additional-records/ Share on other sites More sharing options...
artacus Posted December 20, 2006 Share Posted December 20, 2006 Now is the due_date a moving target? So say someone signs up and first payment is on Nov 12th, after that date is past, does it change to Dec 12 then Jan 12th; or does it stay Nov 12th for ever? If it changes every payment, how do you know when they are done paying? ie. you sign up for 1 year and you've got 6 months left, how do you know that? Link to comment https://forums.phpfreaks.com/topic/31329-forecastestimate-additional-records/#findComment-144977 Share on other sites More sharing options...
artacus Posted December 20, 2006 Share Posted December 20, 2006 Ok, I had to jump thru a bit of a hoop to get this to work. I needed each entry joined 13 times to values 0 thru 12 (for each month) so I just joined it to another table that I know has these values... maybe someone else will have a more elegant solution.[code]SELECT sub.id, srv.amount, DATE_ADD(sub.due_date, INTERVAL (srv.occurance * n.id) MONTH) AS pmt_onFROM subscriptions AS subJOIN services AS srv ON sub.service_id = srv.id JOIN nums AS n ON n.id BETWEEN 0 AND 12 --just joining 0 - 12 hereWHERE DATE_ADD(sub.due_date, INTERVAL (srv.occurance * n.id) MONTH) < DATE_ADD(NOW(), INTERVAL 13 MONTH)[/code]I'd use this in a subquery then for something like this:[code]SELECT DATE_FORMAT(sq.pmt_on, '%m-%Y') AS the_month, SUM(sq.amount) AS tot_payments, COUNT(sq.id) AS num_paymentsFROM (...code above...) AS sqGROUP BY MONTH(sq.pmt_on)[/code] Link to comment https://forums.phpfreaks.com/topic/31329-forecastestimate-additional-records/#findComment-144994 Share on other sites More sharing options...
Emir Posted December 20, 2006 Author Share Posted December 20, 2006 The subscription table also has a [u]begin date[/u] as well as a [u]due date[/u]. I am guessing that after the payment is received that someone manually (or a script) changes the [u]begin date[/u] and the [u]due date[/u] of the [b]subscription[/b] to the next interval. Say someone has a [u]begin date[/u] of 01-04-2006 and their payment is [u]due[/u] 04-04-2006. I am guessing that on the [u]due date[/u] or when the payment is received, the data is changed to having the [u]begin date[/u] of 04-04-2006 and the [u]due date[/u] of 07-04-2006. This is all assuming that the [b]subscription[/b] is for a [b]service[/b] that has a quarterly [u]occurence[/u].Thanks for the SQL, I'll try it to see if it works! Link to comment https://forums.phpfreaks.com/topic/31329-forecastestimate-additional-records/#findComment-144995 Share on other sites More sharing options...
artacus Posted December 20, 2006 Share Posted December 20, 2006 You didn't mention an end_date so I'm assuming that subscriptions are a fixed length of 1 year. Ok, this doesn't change much just the where clause. Instead of[code]DATE_ADD(sub.due_date, INTERVAL (srv.occurance * n.id) MONTH) < DATE_ADD(NOW(), INTERVAL 13 MONTH)-- use --DATE_ADD(sub.due_date, INTERVAL (srv.occurance * n.id) MONTH) BETWEEN sub.begin_date AND DATE_ADD(sub.begin_date, INTERVAL 1 YEAR)[/code] Link to comment https://forums.phpfreaks.com/topic/31329-forecastestimate-additional-records/#findComment-144999 Share on other sites More sharing options...
Emir Posted December 20, 2006 Author Share Posted December 20, 2006 Hmm, what is the "nums" table. As far as I know, I don't have a table equivalent to "nums."Thanks. Link to comment https://forums.phpfreaks.com/topic/31329-forecastestimate-additional-records/#findComment-145001 Share on other sites More sharing options...
artacus Posted December 20, 2006 Share Posted December 20, 2006 [quote author=Emir link=topic=119350.msg488737#msg488737 date=1166604413]Hmm, what is the "nums" table. As far as I know, I don't have a table equivalent to "nums."Thanks.[/quote][quote]Ok, I had to jump thru a bit of a hoop to get this to work. I needed each entry joined 13 times to values 0 thru 12 (for each month) so I just joined it to another table that I know has these values.[/quote] Link to comment https://forums.phpfreaks.com/topic/31329-forecastestimate-additional-records/#findComment-145286 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.