-1

accounts残高のあるリストがあります。itemsaccount_id でタグ付けされたアイテムのリストを含むテーブルもあります。各アイテムには、0 - 未払いまたは 1 - 支払いのいずれかとしてアイテムをマークするステータスがあります。

日時でソートしながら、このマーキングを通過して実行できるクエリまたはストアドプロシージャが必要です

例: それぞれ $50 の商品が 3 つあり、アカウントに $120 を支払います。クエリ/手順の後、最初の 2 つの項目を 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 に答える