mysql - 如何根据同一个表中的先前数据更新 SQL 表

标签 mysql date join

我有一个在我的数据库中衡量学生表现student的表格,如下所示:

ID  TestDate    PerformanceStatus (PS)
1   15/03/2016  0
1   01/04/2016  2
1   05/05/2016  1
1   07/06/2016  1
2   15/03/2016  0
2   01/04/2016  2
2   05/05/2016  1
2   07/06/2016  3
2   23/08/2016  1

我想更新我的表以添加一个新列 PreviousPerformanceStatus。 这个PreviousPerformanceStatus是根据监控到的performanceStatus计算出来的,如下: 注意:如果在 TestDate 之前没有记录 PerformanceStatus,我想让 PreviousPerformanceStatus = PerformanceStatus

ID  TestDate    PS  PreviousPerformanceStatus
1   15/03/2016  0   0
1   01/04/2016  2   0
1   05/05/2016  1   2
1   07/06/2016  1   1
2   15/03/2016  0   0
2   01/04/2016  2   0
2   05/05/2016  1   2
2   07/06/2016  3   1
2   23/08/2016  1   3

如何更新我的 SQL 表?我应该使用加入吗? 谢谢。

最佳答案

假设testdate列是 DATE数据类型(而不是 VARCHAR)

并假设(id,testdate)元组在 student 中是唯一的

我们可以在 SELECT 列表中使用相关子查询。举个例子:

 SELECT t.id
      , t.testdate
      , t.performancestatus
      , ( SELECT p.performancestatus
            FROM student p
           WHERE p.id = t.id
             AND p.testdate < t.testdate
           ORDER BY p.testdate DESC
           LIMIT 1
        ) AS previousperformancestatus
 FROM student t
ORDER BY t.id, t.testdate

一旦我们确认 SELECT 语句给出了我们正在寻找的结果,我们就可以将其转换为 UPDATE 语句。作为内联 View ,或直接使用相关子查询。

UPDATE student t
   SET t.previousperformancestatus
       = ( SELECT p.performancestatus
            FROM student p
           WHERE p.id = t.id
             AND p.testdate < t.testdate
           ORDER BY p.testdate DESC
           LIMIT 1
        )

如果testdate不是DATE数据类型,或者以规范格式存储,那么“小于”比较不能保证将行限制为“较早”的测试日期。并且“order by”不保证首先返回最近的“较早”测试日期。

对于“第一个”测试日期,当没有更早的测试日期时,子查询将返回 NULL。我们可以使用表达式将 NULL 值转换为 0。我们可以将子查询包装在函数 IFNULL( <subquery> ,0) 中。

关于mysql - 如何根据同一个表中的先前数据更新 SQL 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42279521/

相关文章:

SQL 选择没有连接对的行

php - 在 PHP 中转换 key 的最佳方法

mysql - 无法更改表以添加外键?

php - 自动递增问题 - 递增 10

javascript - 根据一天中的时间更改图像

windows - 在CMD中用文件的日期重命名文件

r - 转换 r 中的非标准日期

MySQL 左连接?

php - SQL INNER JOIN中如何使用AS?

php - 对于 wordpress 插件,哪个是最好的 mysql 或 mysqli 或 $wpdb