mysql 根据另一列中的时间戳进行更新

mysql update based on time stamp in another column

+------+------+--------------------+--------------------+----------+
| SEQ  | ID   |instamp         |outstamp        | duration |
+------+------+--------------------+--------------------+----------+
| 2516 |    1 |2020-02-22 14:22:47 |2020-02-22 14:24:06 |     NULL |
| 2517 |    1 |2020-02-22 14:24:08 |2020-02-22 14:24:27 |     NULL |
| 2518 |    1 |2020-02-22 14:24:28 |2020-02-22 14:24:47 |     NULL |
| 2519 |    1 |2020-02-22 14:24:48 |2020-02-22 14:25:06 |     NULL |
| 2520 |    1 |2020-02-22 14:25:08 |2020-02-24 23:14:00 |     NULL |

我正在尝试更新最后一个持续时间参数。 如果我这样做

"mysql> SELECT TIMESTAMPDIFF(MINUTE,outTimestamp,intimestamp) from sTable;

这是有效的。但我无法更新最后一列。

我试过了

update sTable rt set duration = (select TIMESTAMPDIFF(MINUTE, outstamp,instamp) from sTable rt1 where rt1.outstamp is not null and rt.seq = rt1.seq) ;

这是一个错误。如果我遗漏了什么,你能告诉我吗?

您更新的子句不正确。 必须是

UPDATE sTable rt SET duration = TIMESTAMPDIFF(MINUTE, outstamp,instamp) 
WHERE rt.outstamp IS NOT nulL;
CREATE TABLE sTable (
  `SEQ` INTEGER,
  `ID` INTEGER,
  `instamp` datetime,
  `outstamp` datetime,
  `duration` INTEGER 
);
INSERT INTO sTable
  (`SEQ`, `ID`, `instamp`, `outstamp`, `duration`)
VALUES
  ('2516', '1', '2020-02-22 14:22:47', '2020-02-22 14:24:06', NULL),
  ('2517', '1', '2020-02-22 14:24:08', '2020-02-22 14:24:27', NULL),
  ('2518', '1', '2020-02-22 14:24:28', '2020-02-22 14:24:47', NULL),
  ('2519', '1', '2020-02-22 14:24:48', '2020-02-22 14:25:06', NULL),
  ('2520', '1', '2020-02-22 14:25:08', '2020-02-24 23:14:00', NULL);
SELECT TIMESTAMPDIFF(MINUTE,outstamp,instamp) from sTable;
| TIMESTAMPDIFF(MINUTE,outstamp,instamp) |
| -------------------------------------: |
|                                     -1 |
|                                      0 |
|                                      0 |
|                                      0 |
|                                  -3408 |
update sTable rt set duration = TIMESTAMPDIFF(MINUTE, outstamp,instamp) 
where rt.outstamp is not null ;
SELECT * FROM sTable;
 SEQ | ID | instamp             | outstamp            | duration
---: | -: | :------------------ | :------------------ | -------:
2516 |  1 | 2020-02-22 14:22:47 | 2020-02-22 14:24:06 |       -1
2517 |  1 | 2020-02-22 14:24:08 | 2020-02-22 14:24:27 |        0
2518 |  1 | 2020-02-22 14:24:28 | 2020-02-22 14:24:47 |        0
2519 |  1 | 2020-02-22 14:24:48 | 2020-02-22 14:25:06 |        0
2520 |  1 | 2020-02-22 14:25:08 | 2020-02-24 23:14:00 |    -3408

db<>fiddle here