循环记录,根据余额更新状态

时间:2013-04-30 05:37:43

标签: mysql sql

我有一份accounts的余额清单。 我还有一个表items,其中包含一个由account_id标记的项目列表。 每个项目都有一个状态,将该项目标记为0 - 未付款和1 - 付款。

我需要一个查询或存储过程,可以按日期时间

进行排序并执行此标记

对于实例:我有三件物品,每件价值50美元,我在一个帐户中支付120美元。在查询/过程之后,前两个项应标记为1,最后一个0

注意:项目可以在被标记为付费后删除,余额可以随时更改,因此我不能只将项目标记为付款。我需要一种方法在批处理模式下执行此操作并运行此查询/每次进行更改时存储过程

1 个答案:

答案 0 :(得分:0)

 CREATE TABLE my_table
 (item_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, amount INT NOT NULL);

 INSERT INTO my_table VALUES (NULL,50);
 INSERT INTO my_table VALUES (NULL,50);
 INSERT INTO my_table VALUES (NULL,50);

 SELECT * FROM my_table;
 +---------+--------+
 | item_id | amount |
 +---------+--------+
 |       1 |     50 |
 |       2 |     50 |
 |       3 |     50 |
 +---------+--------+

 SELECT x.*
      , SUM(y.amount) rt 
   FROM my_table x 
   JOIN my_table y 
     ON y.item_id <= x.item_id 
  GROUP 
     BY x.item_id;
 +---------+--------+------+
 | item_id | amount | rt   |
 +---------+--------+------+
 |       1 |     50 |   50 |
 |       2 |     50 |  100 |
 |       3 |     50 |  150 |
 +---------+--------+------+

 SELECT x.*
      , CASE WHEN SUM(y.amount) < 120 THEN 1 ELSE 0 END paid 
   FROM my_table x 
   JOIN my_table y 
     ON y.item_id <= x.item_id 
  GROUP 
     BY x.item_id;
 +---------+--------+------+
 | item_id | amount | paid |
 +---------+--------+------+
 |       1 |     50 |    1 |
 |       2 |     50 |    1 |
 |       3 |     50 |    0 |
 +---------+--------+------+

请注意,在您的情况下,您可能不太愿意评估已经“付费”的结果。