我有一份accounts
的余额清单。
我还有一个表items
,其中包含一个由account_id标记的项目列表。
每个项目都有一个状态,将该项目标记为0 - 未付款和1 - 付款。
我需要一个查询或存储过程,可以按日期时间
进行排序并执行此标记对于实例:我有三件物品,每件价值50美元,我在一个帐户中支付120美元。在查询/过程之后,前两个项应标记为1,最后一个0
注意:项目可以在被标记为付费后删除,余额可以随时更改,因此我不能只将项目标记为付款。我需要一种方法在批处理模式下执行此操作并运行此查询/每次进行更改时存储过程
答案 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 |
+---------+--------+------+
请注意,在您的情况下,您可能不太愿意评估已经“付费”的结果。