我是一名CS学生,无法理解这个SQL问题。我已经在下面进行了研究,但仍然完全不理解..
假设您有一个像这样的任务表。 (真正的桌子可能有 成千上万的行。)
mysql> select * from task;
-------------------------------------------------
| id | name | state | started | pid |
|------------------------------------------------
| 1 | sccl | ready | 20120917 16:38:23 | 0 |
| 2 | ela | ready | 20120917 16:38:31 | 0 |
| 3 | ccpl | done | 20120917 16:38:36 | 0 |
| 4 | spl | ready | 20120917 16:38:39 | 0 |
| 5 | uwec | pulling | 20120917 16:38:58 | 0 |
| 6 | ut | ready | 20120917 16:39:03 | 0 |
| 7 | van | ready | 20120917 16:41:32 | 0 |
| 8 | art | ready | 20120917 16:59:03 | 0 |
| 9 | bro | ready | 20120917 16:59:17 | 0 |
-------------------------------------------------
我们需要为处于“就绪”状态的每个任务运行计算密集型流程。
当计算开始时(当分配任务时),该过程应该将状态切换为“计算”,然后在完成时“计算”。
每次计算需要560分钟。
同时运行(最多)3个计算过程,直到所有准备就绪 任务已经处理完毕。
编写SQL语句来管理计算。
DECLARE @CCOUNT INT;
DECLARE @CAP INT;
DECLARE #SPACE INT;
SET @CCOUNT = COUNT(state) FROM task WHERE state = ‘computing’;
SET @CAP = 3;
SET @SPACE = @CAP - @CCOUNT
SELECT * FROM task WHERE state = “ready” limit @SPACE
UPDATE…(Update state to “computing”)
UPDATE…(Update state to “computing”)
问题
我知道我无法传递一个变量来表示有多少计算'那些进程没有涉及Java或PHP等其他语言。
我需要编写SQL语句,基本上概述了不使用其他语言的情况。
我想要超越并首先检查是否有其他进程与状态'计算'在我们获取某些任务之前正在运行但是如何存储它们?
这可能有点令人困惑,但基本上我需要用纯粹的SQL语句回答这个问题。
如果你能帮到那就太棒了!