更新表格中的数据设置特定日期的最小计时活动

时间:2014-02-12 08:08:23

标签: mysql sql

我有一张这样的表:

表:activity

Date         Time      task_name  type
10-02-2014   07:00     Reporting  Scheduled
10-02-2014   1200      mailing    Failed
10-02-2014   16:00     Checking   Scheduled
11-02-2014   10:00     DDDD       Done

我想将type的{​​{1}}列从Scheduled更新为Done,以确定该日期时间最短的特定日期。 下面是查询:

UPDATE activity 
SET type = "Done" 
WHERE 
    type = "Scheduled" 
    AND Date = "10-02-2014" 
    AND time = (SELECT MAX(time) FROM activity WHERE Date = '10-02-2014');

但这是一个错误:

  

ERROR 1093(HY000):您无法在FROM子句中为更新指定目标表“活动”

3 个答案:

答案 0 :(得分:1)

由于MySQL的documented limitation,您不能对子查询FROM子句和更新目标表使用相同的表。

然后你应该做这样的事情:

DECLARE @minTime time
SELECT @minTime = MIN(time) FROM activity WHERE date='10-2-2014'

UPDATE activity 
SET type='Done'
WHERE date='10-2-2014' AND type='scheduled' AND time = @minTime

答案 1 :(得分:0)

请你试试这个:

update activity 
set type='Done'
where date='10-2-2014' and type='scheduled' and time in (select MIN(time) from activity where date='10-2-2014')     

这对我很有帮助。 我正在使用sql server 2008

希望这会有所帮助..

答案 2 :(得分:0)

人们不会在这里谈论一些废话。请考虑以下内容......

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
, type VARCHAR(12) NOT NULL
);

INSERT INTO my_table (type) VALUES
('scheduled'),('failed'),('scheduled'),('done');

UPDATE my_table x 
  LEFT 
  JOIN my_table y 
    ON y.id < x.id 
   SET x.type = 'done' 
 WHERE y.id IS NULL;

SELECT * FROM my_table;
+----+-----------+
| id | type      |
+----+-----------+
|  1 | done      |
|  2 | failed    |
|  3 | scheduled |
|  4 | done      |
+----+-----------+

仅作为示例,这里有一些使用子查询的代码 - 虽然是不相关的...

UPDATE my_table x 
  JOIN (SELECT MIN(id) minid FROM my_table) y 
    ON y.minid = x.id 
   SET x.type = 'done';