2012-10-11 31 views
1

我有一个MySQL列表,其中有4列,如下所示。MySQL查询返回日期列表的总利润/损失

TransactionID | Item | Amount | Date 
------------------------------------ 
       |  |  | 
       |  |  | 

我有很多条目,什么我希望能够做的是建立在每个时间点返回的总利润/亏损的列表的查询?

想象我有以下交易:

Bought item for 5 
Sold item for 15 
Bought item for 5 
Sold item for 15 

所以我希望它返回这样的事情。

Profit/Loss | Date 
------------------ 
-5   | 20-10-12 
10   | 21-10-12 
5   | 22-10-12 
20   | 23-10-12 

这是可能的MySQL查询吗?

+0

的解决方案返回的每一天SUM,但我想知道的利润总额和亏损一定。所以基本上我想知道我在某个时间点总共赚了多少钱。所以就像我希望能够看到的那样,在01-08-12这个企业赚取了40欧元的利润。 – PriestVallon

+0

根据您的编辑更新了我的答案 – Dalen

回答

1

假设Date作为你显示出对预期结果这应该工作存放:

SELECT 
    SUM(Amount) AS "Profit/Loss", 
    Date 
FROM your_table 
GROUP BY(Date) 

否则ID DateDATE类型,DATETIMETIMESTAMP你可以做这样的事情:

SELECT 
    SUM(Amount) AS "Profit/Loss", 
    DATE_FORMAT(Date, '%d-%m-%y') AS Date 
FROM your_table 
GROUP BY(DATE_FORMAT(Date, '%d-%m-%y')) 

参考号:

EDIT(OP的评论后)

实现COMULATIVE SUM here是一个很好的提示:

SET @csum := 0; 
SELECT 
    (@csum := @csum + x.ProfitLoss) as ProfitLoss, 
    x.Date 
FROM 
(
    SELECT 
     SUM(Amount) AS ProfitLoss, 
     DATE_FORMAT(Date, '%d-%m-%y') AS Date 
    FROM your_table 
    GROUP BY(DATE_FORMAT(Date, '%d-%m-%y')) 
) x 
order by x.Date; 

essentialy您当前的总和存入一个变量(@csum),并且对于分组交易的每一行,您可以通过每日ba增加它枪

+1

我应该认为名为'Profit/Loss'的列在MySQL中不起作用? ':)' – halfer

+0

@halfer你说得对,回答更新,谢谢 – Dalen

+0

不用担心。 Tbh我可能会完全避开斜线,但无论如何+1。 – halfer

2
SELECT SUM(Amount) AS ProfitOrLoss FROM TableName GROUP BY Date 
1
SELECT SUM(Amount) FROM TableName GROUP BY Date