Hi again,
if your looking for raising sub-totals, i found you thos form :

mysql> select 'TOTAL',
    -> sum(if(DATE_FORMAT( `paymentDate` , '%Y-%m' )<='2005-01',amount,0)) as
'2005-01',
    -> sum(if(DATE_FORMAT( `paymentDate` , '%Y-%m' )<='2005-02',amount,0)) as
'2005-02'
    -> from payments
    -> group by DATE_FORMAT( `paymentDate` , '%Y' );
+-------+---------+---------+
| TOTAL | 2005-01 | 2005-02 |
+-------+---------+---------+
| TOTAL |     200 |     258 |
+-------+---------+---------+
1 row in set (0.00 sec)

Hope that helps.

Mathias
******************************
Selon [EMAIL PROTECTED]:

> Hi,
> aren't you looking for somthing like that :
>
> mysql> select sum(amount),DATE_FORMAT( `paymentDate` , '%Y-%m' ) c FROM
> `payments`   GROUP BY c with rollup;
> +-------------+---------+
> | sum(amount) | c       |
> +-------------+---------+
> |         200 | 2005-01 |
> |          58 | 2005-02 |
> |         258 | NULL    |
> +-------------+---------+
> 3 rows in set (0.00 sec)
>
> but this is not really far from what you did :o)
>
> Mathias
>
> Selon Rhino <[EMAIL PROTECTED]>:
>
> >
> > ----- Original Message -----
> > From: "Russell Horn" <[EMAIL PROTECTED]>
> > To: <mysql@lists.mysql.com>
> > Sent: Wednesday, May 25, 2005 8:02 AM
> > Subject: Cumulative Totals
> >
> >
> > > I have a pretty simple table with a list of payments, not much more
> > > than:
> > >
> > > paymentID | amount | paymentDate
> > > 1   | 123    | 2005-01-10
> > > 2   | 77    | 2005-01-13
> > > 3   | 45    | 2005-02-16
> > > 4   | 13    | 2005-02-17
> > >
> > >
> > > I can get totals per month using a query like:
> > >
> > > SELECT SUM(amount) , DATE_FORMAT( `paymentDate` , '%Y-%m' )   FROM
> > > `payments`   GROUP BY DATE_FORMAT( payments . date , '%Y-%m' )
> > >
> > > That would give me:
> > >
> > > amount | paymentDate
> > > 200    | 2005-01
> > > 58     | 2005-02
> > >
> > > Is there any way to get a running cumulative total directly from mysql?
> > > Something like:
> > >
> > > amount | paymentDate
> > > 200    | 2005-01
> > > 258    | 2005-02
> > >
> >
> > I'm not sure if this solution will appeal to you but I satisfied the same
> > requirement in DB2 by writing a UDF (User-Defined Function). The function
> > was called RunningSum() and was invoked as follows:
> >
> >     select empno, salary, runningSum(salary) as running_sum from mytable
> >
> > and gave the following result:
> >
> >     EMPNO    SALARY    RUNNING_SUM
> >     00001     25000.00    25000.00
> >     00002    18000.00    43000.00
> >     00003    32000.00    75000.00
> >
> > I think that's the sort of thing you want, right?
> >
> > Now, I haven't actually tried porting my UDF over to MySQL so I'm not sure
> > if you could even make it work in MySQL. I believe you need to be using
> > Version 5.x of MySQL to be able to use UDFs and I'm still on Version 4.0.x.
> >
> > The other thing you need for my UDF to work in MySQL would be a scratchpad
> > area. I've just skimmed the UDF section of the MySQL manual but can't see
> > anything that says clearly one way or the other whether they support
> > scratchpads or something functionally equivalent.
> >
> > I wrote my function in Java, which is apparently not supported in MySQL but
> > the function itself is only a couple of lines long and doesn't use any
> > features unique to Java. You should be able to do the same work in C or C++
> > or (probably) SQL. The logic is very basic:
> >
> > a. You set up a scratchpad or global variable that is initialized to zero.
> I
> > called this variable runningTotal. In my case, it is defined as a
> BigDecimal
> > but you should be able to use a comparable C/C++/SQL datatype, like double.
> > b. The function accepts a value from the column that is its argument. In
> the
> > example above, that is the salary column. The function adds that value to
> > the runningTotal variable.
> > c. The function is called once for each row of the table that satisfies the
> > query.
> > Each time it is called, the function returns runningTotal and displays it
> > (after the new value has been added to runningTotal).
> >
> > In Java, this function looks like this (diagnostic code snipped). My
> > function was written to handle decimal numbers but you could change it very
> > easily to handle integers by changing 'BigDecimal' to 'int' each time it
> > occurs (and removing the import for java.math.BigDecimal).
> >
> >
> ============================================================================
> > ===========================================================
> >
> > package db2v8.udf.db2general;
> >
> > import java.io.BufferedWriter;
> > import java.math.BigDecimal;
> >
> > import COM.ibm.db2.app.UDF;
> >
> >
> > /**
> >  * Class RunningSum contains various methods for DB2 UDFs that involve
> > keeping running
> >  * totals of numeric columns.
> >  *
> >  * @version 1.0
> >  * @since 2005-03-03
> >  */
> > public class RunningSum extends UDF {
> >
> >     /**
> >      * The scratchpad for the runningSum() method. It *must* be initialized
> > outside of
> >      * the method.
> >      */
> >     private BigDecimal runningTotal = new BigDecimal(0.0);
> >
> >
> >     /**
> >      * Method runningSum() is used to accumulate a running total for a
> given
> > column of a
> >      * table.
> >      *
> >      * <p>Given a database query that returns multiple rows and a numeric
> > input 'amount',
> >      * this function returns that the sum of the current amount and the
> > total of the
> >      * previous amounts in the same column.</p>
> >      *
> >      * <p>For example, given this table:
> >      * <xmp>
> >      * EMPNO    SALARY
> >      * 00001    25000.00
> >      * 00002    18000.00
> >      * 00003    32000.00
> >      * </xmp>
> >      * </p>
> >      *
> >      * <p>and this query:</p>
> >      * <xmp>select empno, salary, runningSum(salary) as running_sum from
> > mytable</xmp>
> >      *
> >      * <p>The query will return:</p>
> >      * <xmp>
> >      * EMPNO SALARY  RUNNING_SUM
> >      * 00001 25000.00  25000.00
> >      * 00002 18000.00  43000.00
> >      * 00003 32000.00  75000.00
> >      * </xmp>
> >      *
> >      * <p>In other words, the runningSum() function will return the actual
> > salary of the first
> >      * employee on the first row of the result, the sum of the salaries of
> > the first two
> >      * employees on the second row of the result, and the sum of the
> > salaries of the first
> >      * three employees on the third row of the result.</p>
> >      *
> >      * @version 1.0
> >      * @since 2005-03-03
> >      *
> >      * @return int the total of the values in the input column that have
> > been read so far
> >      * @throws Exception
> >      */
> >     public void runningSum(BigDecimal amount, BigDecimal sum) throws
> > Exception {
> >
> >         try {
> >
> >             /*
> >              * Add the amount from the current row to the sum.
> >              */
> >             runningTotal = runningTotal.add(amount);
> >
> >             /* Return the value of the running total. */
> >             set(2, runningTotal);
> >         } catch (Exception excp) {
> >             excp.printStackTrace();
> >             throw new IllegalArgumentException("runningSum() - " +
> > excp.getMessage());
> >         }
> >     }
> >
> > }
> >
> >
> ============================================================================
> > ===========================================================
> >
> > Like I said, you may not want to get into something like this but I think
> it
> > is the best way to handle your requirement. It will make it very easy for
> > you to get running totals in the future and helps keep your SQL very
> simple.
> >
> > Rhino
> >
> >
> >
> > --
> > No virus found in this outgoing message.
> > Checked by AVG Anti-Virus.
> > Version: 7.0.322 / Virus Database: 266.11.16 - Release Date: 24/05/2005
> >
> >
> > --
> > MySQL General Mailing List
> > For list archives: http://lists.mysql.com/mysql
> > To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]
> >
> >
>
>
>
> --
> MySQL General Mailing List
> For list archives: http://lists.mysql.com/mysql
> To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]
>
>



-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to