-1

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

我需要一个查询或存储过程,它可以在按日期时间排序时通过并执行此标记

例如:我有三件每件价值 50 美元的物品,我将 120 美元存入一个帐户。在查询/过程之后,前两项应标记为 1,最后一项应标记为 0

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

4

1 回答 1

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 |
 +---------+--------+------+

请注意,在您的情况下,您可能对已经“支付”的评估结果不太感兴趣。

于 2013-04-30T06:58:44.077 回答