MySQL多外键指向同一主键,求时间对的时间差
计算Linked表中时间戳对的时间差
你只需要两次关联Points表即可解决这个问题——因为Linked的prevID和nextID都指向Points的主键ID,给Points表起两个不同的别名,分别关联这两个外键,就能同时获取一对时间戳,再计算差值。
示例SQL(MySQL)
SELECT l.ID AS linked_id, p_prev.TStamp AS prev_timestamp, p_next.TStamp AS next_timestamp, -- 计算秒级时间差,可替换为MINUTE/HOUR/DAY等单位 TIMESTAMPDIFF(SECOND, p_prev.TStamp, p_next.TStamp) AS time_diff_seconds, TIMESTAMPDIFF(MINUTE, p_prev.TStamp, p_next.TStamp) AS time_diff_minutes FROM Linked l INNER JOIN Points p_prev ON l.prevID = p_prev.ID INNER JOIN Points p_next ON l.nextID = p_next.ID;
关键说明
- 用
p_prev和p_next作为Points表的两个别名,分别对应Linked表中的前序和后序记录 TIMESTAMPDIFF是MySQL的时间差计算函数,第一个参数指定时间单位(如SECOND、MINUTE),后面两个参数是起始和结束时间- 如果Linked表中
prevID或nextID可能为NULL,可以把INNER JOIN换成LEFT JOIN,这样即使某一端没有对应Points记录,也能返回结果(此时时间差会是NULL)
内容的提问来源于stack exchange,提问作者Christos Pater
相关产品推荐
相关产品推荐

