位于2个不同表中的2个数字之间的差异的平均值

时间:2018-02-17 16:10:46

标签: php mysql sql timestamp


我认为,SQL问题远远超出了我目前的知识。我有两个表,每两个日期的时间戳。我希望这两个日期之间的平均时间,平均值涉及表格中输入的所有字段。

我希望我能更清楚地简化我的SQL表和我想做的事情:

- 表1:研究
- - id
- - 时间戳(输入日期,例如研究开始)

- 表2:study_monitoring
- - id
- - id_study
- - timestamp_2(例如,第一阶段的开始)



我想获得 timestamp timestamp_2 之间的平均时间。
我首先要链接 {{1由于位于表2 中的ID,<}> 字段到其正确的 study 字段。

然后做两个时间戳之间的区别(第二个时间戳总是优于另一个)。对所有字段重复此操作,最后得到平均值。

在几个SQL请求中执行它不会打扰我,它将在一个简单的PHP函数中返回时间戳差异的平均值。

我真的不知道从哪里开始,我的表的建模是否允许这样的计算?
提前致谢!

4 个答案:

答案 0 :(得分:1)

如果我理解正确:

select s.id,
       avg(to_seconds(sm.timestamp_2) - to_seconds(s.timestamp)) as avg_in_seconds
from study s left join
     study_monitoring sm
     on s.id = sm.id_study
group by s.id;

这假定秒是合理的时间单位。还有其他方法可以获取其他单位或将其转换回区间表示。

答案 1 :(得分:0)

这将为您提供以秒为单位的平均时差。

SELECT Avg(DATEDIFF(second, s.timestamp, sm.timestamp_2))[AverageDifferenceSeconds]
FROM study s inner join study_monitoring sm on s.id=sm.id_study

答案 2 :(得分:0)

给出以下架构:

SELECT  AVG(TIMESTAMPDIFF(second, Table_1.Start, Table_2.StartPhase))
FROM Study AS Table_1 
  INNER JOIN 
    Study_Monitoring AS Table_2 
      ON Table_1.Id = Table_2.Study_Id_FK

你会得到平均差异秒(假设这是MySQL) 使用以下命令:

FRAC_SECOND (microseconds), SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, or YEAR.

TIMESTAMPDIFF被描述为here以接受单位

<select id="myelement" onchange="update(event)"> <option value='{"id":1,"param":"val1"}'>val1 <option value='{"id":2,"param":"val2"}'>val2 </select>

随意根据需要进行更改。 :)

请参阅fiddle

答案 3 :(得分:0)

您没有为diff指定所需的粒度。这可以在几天内完成:

select username, avg(end_date - start_date) as avg_days
from mytable
group by username

如果您想要以秒为单位的差异,请使用datediff():

select username, avg(datediff(ss, start_date, end_date)) as avg_seconds
...

datediff可以通过改变第一个参数(可以是ss,mi,hh,dd,wk,mm或yy),以任意时间单位测量差异达到几年。