mysql - 如何将表内的属性引用到同一表内新行内的值

标签 mysql sql database database-design

我正在尝试创建一个表来保存许多运动员的历史运行时间(以分钟为单位)。该表包含人员姓名的外键,并存储他们的新运行时间和先前的运行时间以及执行运行的日期。

我试图将运行者的所有记录保存在同一个表中。我想在新的运行时间完成时在新条目中引用旧的运行时间。我正在努力思考这种关系将如何运作。

下表解释了我想要实现的目标。

<小时/>

|名称_ID {FK}|完成日期|新时间|旧时间|

| 001| 16/02/2019 | 123 | 123 108 |

| 001| 16/03/2019 | 136 | 136 123 |

如表所示,2019 年 2 月 16 日的新平均值显示为 2019 年 3 月 16 日的旧平均值。

我的问题是如何构建这种关系?是否有可能建立这种关系?

或者

有没有更有效的方法?即有下表:

<小时/>

|名称_ID {FK}|完成日期|新时间|

| 001| 16/02/2019 | 123 |

| 001| 16/03/2019 | 136 |

并创建一个查询,该查询可以使用 Name_ID 和completion_Date 属性来生成输出:

<小时/>

|名称_ID {FK}|完成日期|新时间|旧时间|

| 001| 16/02/2019 | 123 | 123 108 |

任何帮助将不胜感激。

最佳答案

如果您没有 Mysql 8.x 服务器,您可以使用它。

CREATE TABLE table1
(`Name_ID {FK}` int, `Completion_Date` varchar(10), `New_Time` int)
;

INSERT INTO table1
(`Name_ID {FK}`, `Completion_Date`, `New_Time`)
VALUES
(001, '16/01/2019', 108),
(001, '16/02/2019', 123),
(001, '16/03/2019', 136)
;

你可以使用这个

select  `Name_ID {FK}`,`Completion_Date`,@quot old_time, @quot:=`New_Time` new_time
 from table1 p,(SELECT @quot := 0) r
 order by  `Name_ID {FK}`,`Completion_Date`;

获得此结果:

Name_ID {FK}    Completion_Date     old_time    new_time
  1              16/01/2019            0           108
  1              16/02/2019            108         123
  1              16/03/2019            123         136

正是基于此 Simulate lag function in MySQL

关于mysql - 如何将表内的属性引用到同一表内新行内的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57208634/

相关文章:

mysql - 如何从mySQL获取数据到UITextView?

mysql - 将第 n 行之后的所有行组合在一起

sql - 事件记录查询。按多个表中的多列分组

sql - 如何阅读 Postgres 事务日志

mysql - 处理 JOIN 中的 NULL

database - 如何从 sqlite3 附加数据库中的列进行更新?

PHP & MySQL 图像删除问题?

mysql - 连接 5 个 mysql 查询

sql - 后端版本不支持设计数据库图或表

MYSQL:带来带有表别名的列名的连接结果