You can do this using a variable. Set the variable starting value with
a "query":
set @runningTotal := 0

Then add the calculation to your total:
SELECT a. trans_id ,a.tran_date,b.cat_type,a.payee,a.amnt,
@runningTotal := @runningTotal+a.amnt AS rollingTotal from
transactions a join categories b on a.cat_id = b.cat_id where
a.user_id=1 and a.acc_id=3 order by a.tran_date ASC

Brent Baisley

On Thu, Sep 3, 2009 at 1:56 PM, John
Daisley<john.dais...@butterflysystems.co.uk> wrote:
> Hi,
>
> Hoping someone can help me with this little issue! It seems really
> simple but my brain is refusing to work.
>
> We have a transactions tables like so...
>
> mysql> desc transactions;
> +-----------+----------------------+------+-----+---------+----------------+
> | Field     | Type                 | Null | Key | Default | Extra
> |
> +-----------+----------------------+------+-----+---------+----------------+
> | trans_id  | int(10) unsigned     | NO   | PRI | NULL    |
> auto_increment |
> | user_id   | smallint(5) unsigned | NO   | MUL | NULL    |
> |
> | acc_id    | smallint(5) unsigned | NO   | MUL | NULL    |
> |
> | tran_date | date                 | NO   |     | NULL    |
> |
> | payee     | varchar(25)          | NO   |     | NULL    |
> |
> | amnt      | decimal(8,2)         | NO   |     | NULL    |
> |
> | cat_id    | int(10) unsigned     | NO   | MUL | NULL    |
> |
> +-----------+----------------------+------+-----+---------+----------------+
> 7 rows in set (0.00 sec)
>
>
>
> ...this joins to a few other tables and has the following simple query
> run on it to show all transactions for a particular user and account.
>
> mysql>  SELECT a. trans_id ,a.tran_date,b.cat_type,a.payee,a.amnt from
> transactions a join categories b on a.cat_id = b.cat_id where
> a.user_id=1 and a.acc_id=3 order by a.tran_date ASC;
>
> Which returns a list something like this...
>
> +-----------+-----------------+--------------+---------------------------+----------+
>  trans_id | tran_date    | cat_type | payee                   | amnt  |
> +-----------+-----------------+-------------+----------------------------+----------+
>  |          1| 2009-08-31 | Income   | Opening Balance    |   0.00 |
>  |          3| 2009-09-02 | Income   | Test Transactions   |   0.20 |
>  |        23| 2009-09-02 | Income   | Tester                    |   1.20
> |
>  |      102| 2009-09-02 | Income   | Debit                     |  -1.09
> |
> +-----------+-----------------+-------------+----------------------------+----------+
> 4 rows in set (0.00 sec)
>
> Now this has been fine for a long time until this afternoon when I get a
> call saying the query needs editing to add another column to the output
> showing a rolling account balance. This means the current output show
> above needs to change to something like this...
>
> +---------+---------------+------------+----------------------+-------+-------------------------+
> |trans_id | |tran_date     | cat_type | payee                | amnt |
> Rolling Balance      |
> +---------+---------------+------------+----------------------+-------+-------------------------+
> |           1| 2009-08-31 | Income   | Opening Balance |  0.00 |
> 0.00 |
> |           3| 2009-09-02 | Income   | Test Transactions |  0.20 |
> 0.20 |
> |         23| 2009-09-02 | Income   | Tester                   |  1.20 |
> 1.40 |
> |       102| 2009-09-02 | Income   | Debit                    | -1.09 |
> 0.31 |
> +---------+---------------+------------+----------------------+-------+-------------------------+
> 4 rows in set (0.00 sec)
>
> Anyone got any tips on how to achieve this? Group with ROLLUP doesn't
> really do what I need. I've tried a couple of sub queries but cant get
> the output I need.
>
> I want to avoid storing a rolling balance into the table because this
> would take a while due to the number of records and could create
> problems when someone goes in and modifies a single transaction.
>
> Any tips would be much appreciated.
>
> Regards
>

--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/mysql?unsub=arch...@jab.org

Reply via email to