如何将表内的属性引用到同一表内新行内的值
Posted
技术标签:
【中文标题】如何将表内的属性引用到同一表内新行内的值【英文标题】:How do I reference an attribute inside a table to a value inside a new row within the same table 【发布时间】:2019-07-25 19:01:09 【问题描述】:我正在尝试创建一个表格,其中包含许多运动员的历史跑步时间(以分钟为单位)。该表保存人员姓名的外键,同时存储他们的新运行时间和以前的运行时间,以及执行运行的日期。
我正在尝试将所有跑步者的记录保存在同一张表中。我想在新的运行时间完成时的新条目中引用旧的运行时间。我正在为这种关系如何运作而苦苦挣扎。
下面是一张表格,解释了我想要实现的目标。
|Name_ID FK|Completion_Date|New_Time|Old_Time|
| 001 | 16/02/2019 | 123 | 108 |
| 001 | 16/03/2019 | 136 | 123 |
如表格所示,2019 年 2 月 16 日的新平均值显示为 2019 年 3 月 16 日的旧平均值。
我的问题是如何构建这种关系?有可能建立这种关系吗?
或
有没有更有效的方法?即有下表:
|Name_ID FK|Completion_Date|New_Time|
| 001 | 16/02/2019 | 123 |
| 001 | 16/03/2019 | 136 |
并创建一个查询,该查询可以使用 Name_ID 和 completion_Date 属性来生成输出:
|Name_ID FK|Completion_Date|New_Time|Old_Time|
| 001 | 16/02/2019 | 123 | 108 |
任何帮助将不胜感激。
【问题讨论】:
抱歉,我的表格格式丢失了。 【参考方案1】:如果您没有 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
【讨论】:
感谢您的回答。这给了我一些东西,你提供的例子工作得很好。 :)【参考方案2】:您可以使用超前/滞后分析函数来获得所需的结果 -
使用您的姓名|完成日期| new_time runner_data 表,
用下面的 sql 创建一个新表:
insert into new_table select name, completion_date, new_time, lag(completion_date) over ( partition by name order by completion_date desc) as old_time from runner_data;
【讨论】:
以上是关于如何将表内的属性引用到同一表内新行内的值的主要内容,如果未能解决你的问题,请参考以下文章
SQLServer如何将一个表内的所有数据导入另一个表后,删除表内的所有数据