我认为,SQL问题远远超出了我目前的知识。我有两个表,每两个日期的时间戳。我希望这两个日期之间的平均时间,平均值涉及表格中输入的所有字段。
我希望我能更清楚地简化我的SQL表和我想做的事情:
- 表1:研究
- - id
- - 时间戳(输入日期,例如研究开始)
- 表2:study_monitoring
- - id
- - id_study
- - timestamp_2(例如,第一阶段的开始)
我想获得 timestamp
和 timestamp_2
之间的平均时间。
我首先要链接 {{1由于位于表2 中的ID,<}> 字段到其正确的 study 字段。
然后做两个时间戳之间的区别(第二个时间戳总是优于另一个)。对所有字段重复此操作,最后得到平均值。
在几个SQL请求中执行它不会打扰我,它将在一个简单的PHP函数中返回时间戳差异的平均值。
我真的不知道从哪里开始,我的表的建模是否允许这样的计算?
提前致谢!
答案 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),以任意时间单位测量差异达到几年。