我有一张计费记录的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* -
我甚至可能没想到这一点。我愿意接受其他建议
答案 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