找到最新的账单未支付

时间:2012-03-18 04:30:17

标签: mysql

我有一张计费记录的MySQL表。每个条目记录付款或费用,金额,应用日期和相关客户ID。如果收费高于付款,我如何获得按最近排序的未结收费用记录,如果付款多于收费,则按最近的顺序排序?基本上,如果我有3行费用,每行1.25美元,2行1.50美元,我怎样才能获得最近的3次充电记录,并且知道只有0,75美元到期?我希望这是有道理的。

假设我们有这张表:

user_id | amount | date_applied | type
---------------------------------------
    1       1.25    *datetime*      -
    1       1.25    *datetime*      -
    1       1.25    *datetime*      -
    1       1.50    *datetime*      +
    1       1.50    *datetime*      +

结果应与此类似:

user_id | amount | date_applied | type
---------------------------------------
    1       0.75    *datetime*      -

我甚至可能没想到这一点。我愿意接受其他建议

2 个答案:

答案 0 :(得分:1)

你的问题有点棘手。那是因为没有明确定义要显示的日期时间。看起来你想要在每个用户的表格中得到所有正值和负值的总和。问题在于,当您完成总计时,您无法获得日期时间的详细信息。您必须选择其中一个,但结果中不会有任何顺序,因为结果中每个用户只有一个日期时间(在您的示例中,您可以看到用户1只有一个日期时间)。 / p>

另外,您需要类型列吗?为什么不将它添加到金额?

根据提供的详细信息,这是我能满足您需求的最接近的地方:

select user_id, sum(if(type = '+', amount, -amount)) amount from t
group by user_id

+---------+--------+
| USER_ID | AMOUNT |
+---------+--------+
|       1 | -0.75  |
+---------+--------+

注意:如果您确实需要datetime为每条记录设置一个实际日期,并使用预期日期值更新预期结果。

答案 1 :(得分:0)

SELECT 
     A.USERID, 
     B.TOTAL, 
     A.date_applied, 
     IF(B.TOTAL < 0, '-', '+') 
FROM 
     TABLE AS A 
JOIN
     (
     SELECT 
              USERID, 
              SUM(IF(TYPE = '+', AMOUNT, AMOUNT * -1)) AS TOTAL 
     FROM 
              TABLE 
     GROUP BY 
              USERID, AMOUNT
     ) AS B 
ON A.USERID = B.USERID