David McAfee
davidmcafee at gmail.com
Tue Mar 12 17:19:49 CDT 2013
SELECT qryBase.Well, qryBase.SomeDate, qryBase.OilSumm AS CurrOil,
Nz(PrevMonth.OilSumm,0) AS PrevOil, Nz([TwoMonthsAgo].[OilSumm],0) AS
PrevOil2, ([CurrOil]+[PrevOil]+[PrevOil2]) AS ThreeMonthOil
FROM (qryBase LEFT JOIN qryBase AS PrevMonth ON (qryBase.SomeDate =
PrevMonth.NextMonth) AND (qryBase.Well = PrevMonth.Well)) LEFT JOIN qryBase
AS TwoMonthsAgo ON (qryBase.SomeDate = TwoMonthsAgo.TwoMonths) AND
(qryBase.Well = TwoMonthsAgo.Well)
ORDER BY qryBase.Well, qryBase.SomeDate;
QryBase:
SELECT tblSomeTable.Well, tblSomeTable.SomeDate, Sum(tblSomeTable.Oil) AS
OilSumm, DateAdd("m",1,[SomeDate]) AS NextMonth, DateAdd("m",2,[SomeDate])
AS TwoMonths
FROM tblSomeTable
GROUP BY tblSomeTable.Well, tblSomeTable.SomeDate,
DateAdd("m",1,[SomeDate]), DateAdd("m",2,[SomeDate])
ORDER BY tblSomeTable.Well, tblSomeTable.SomeDate;
You could probably do something easier using Dsum, but this is what I could
spit out in the short time that I had.
D
On Tue, Mar 12, 2013 at 2:08 PM, Kaup, Chester <
Chester_Kaup at kindermorgan.com> wrote:
> I probably did not make it clear. I am looking for a total each month of
> the current month and the prior 2 months. For example March will be a total
> of January, February and March. April will be a total of February, March
> and April. Thank all.
>
> -----Original Message-----
> From: accessd-bounces at databaseadvisors.com [mailto:
> accessd-bounces at databaseadvisors.com] On Behalf Of David McAfee
> Sent: Tuesday, March 12, 2013 3:43 PM
> To: Access Developers discussion and problem solving
> Subject: Re: [AccessD] 3 month moving total
>
> I don't think the intended results are correct.
>
> You can get a result like this:
>
> Well YearNo Qtr OilSum
> 1 2012 1 32
> 1 2012 2 33
> 1 2012 3 12
> 2 2012 1 45
> 2 2012 2 24
> 2 2012 3 14
>
> By Creating a Qtr table (you can also create a function to do this) such
> as:
> PKID (AutoNumber)
> Qtr (Number)
> MonthNo (Number)
>
> values should be:
> 1,1
> 1,2
> 1,3
> 2,4
> 2,5
> 2,6
> 3,7
> 3,8
> 3,9
> 4,10
> 4,11
> 4,12
>
> Then create a query such as:
> SELECT A.Well, A.YearNo, Qtr, SUM(Oil) AS OilSum FROM (SELECT
> tblSomeTable.Well, tblSomeTable.SomeDate, tblSomeTable.Oil,
> Year(SomeDate) AS YearNo, Month([SomeDate]) AS MonthNo FROM tblSomeTable)
> A INNER JOIN tblQtr B ON A.MonthNo = B.MonthNo GROUP BY Well, YearNo, Qtr ;
>
> If you don't want to show incomplete quarters, you can add a column to
> tblQtr called QtrCounter and put a value of 1 in each row
>
> Modify the SQL to:
> SELECT A.Well, A.YearNo, B.Qtr, Sum(A.Oil) AS OilSum, Sum(B.QtrCounter) AS
> CtrSum FROM (SELECT tblSomeTable.Well, tblSomeTable.SomeDate,
> tblSomeTable.Oil,
> Year(SomeDate) AS YearNo, Month([SomeDate]) AS MonthNo FROM tblSomeTable)
> AS A INNER JOIN tblQtr AS B ON A.MonthNo = B.MonthNo GROUP BY A.Well,
> A.YearNo, B.Qtr;
>
> and your results show like this:
> Well YearNo Qtr OilSum CtrSum
> 1 2012 1 32 3
> 1 2012 2 33 3
> 1 2012 3 12 1
> 2 2012 1 45 3
> 2 2012 2 24 3
> 2 2012 3 14 1
>
> Now you can opt to filter out where CtrSum <3
>
> SELECT A.Well, A.YearNo, B.Qtr, Sum(A.Oil) AS OilSum, Sum(B.QtrCounter) AS
> CtrSum FROM (SELECT tblSomeTable.Well, tblSomeTable.SomeDate,
> tblSomeTable.Oil,
> Year(SomeDate) AS YearNo, Month([SomeDate]) AS MonthNo FROM tblSomeTable)
> AS A INNER JOIN tblQtr AS B ON A.MonthNo = B.MonthNo GROUP BY A.Well,
> A.YearNo, B.Qtr HAVING (((Sum(B.QtrCounter))=3));
>
>
> Well YearNo Qtr OilSum
> 1 2012 1 32
> 1 2012 2 33
> 2 2012 1 45
> 2 2012 2 24
>
> HTH
> David
>
>
>
>
>
>
> On Tue, Mar 12, 2013 at 12:53 PM, Kaup, Chester <
> Chester_Kaup at kindermorgan.com> wrote:
>
> > I was wondering if it is possible to create a 3 month moving total in
> > a query. I have had no luck in finding an answer in any searches.
> > Below is some sample data and what the results should be. Thanks for any
> ideas.
> >
> > SAMPLE DATA
> > Well Date Oil
> > 1 1/1/2012 10
> > 1 2/1/2012 14
> > 1 3/1/2012 8
> > 1 4/1/2012 11
> > 1 5/1/2012 9
> > 1 6/1/2012 13
> > 1 7/1/2012 12
> > 2 1/1/2012 7
> > 2 2/1/2012 20
> > 2 3/1/2012 18
> > 2 4/1/2012 5
> > 2 5/1/2012 9
> > 2 6/1/2012 10
> > 2 7/1/2012 14
> >
> > INTENDED RESULTS
> > 1 3/1/2012 32
> > 1 4/1/2012 33
> > 1 5/1/2012 28
> > 1 6/1/2012 33
> > 1 7/1/2012 34
> > 2 3/1/2012 45
> > 2 4/1/2012 43
> > etc
> >
>