我想计算sql中的平均值。我在表中有以下记录。
让表名= frarecord
在上表中,每列都是NOT NULL。与评论中提到的@peepa一样,我们可以通过标识符识别哪个开始事件与哪个结束事件一起。
我想用以下条件计算时间戳的平均值。
当eventid = 5然后时间戳以结束时间结束时
当eventid = 6时的情况,然后时间戳以结束时间结束
现在
time = endTime - startTime。
和
平均平均(时间)
编辑:时间戳是毫秒而不是sql时间戳。 我尝试使用以下查询来分隔startTime和endTime
查询1:
select
case when f.eventid=5 then f.timestamps end as starttime,
case when f.eventid=6 then f.timestamps end as endtime
from frarecord f
和Query2:
select f1.timestamps as starttime, f2.timestamps as endtime
from frarecord f
left join frarecord f1 on (f1.id=f.id and f.eventid=5)
left join frarecord f2 on (f2.id=f.id and f.eventid=6)
并得到以下输出。
非常感谢您的帮助。
谢谢。
答案 0 :(得分:0)
不太确定这是否是您所追求的但是由于提供的数据,它可能是我能想到的最好的,这假设您一次只能运行一个'formname'。 这不是一个完整的答案,但可能是朝着正确方向迈出的一步?
;with tablecte as (
select
case when f.eventid=5 then f.timestamps end as starttime,
case when f.eventid=6 then f.timestamps end as endtime,
f.formname
from frarecord f
order by ISNULL(starttime,endtime)
--select f1.timestamps as starttime, f2.timestamps as endtime
--from frarecord f
--left join frarecord f1 on (f1.id=f.id and f.eventid=5)
--left join frarecord f2 on (f2.id=f.id and f.eventid=6)
), combine as (
select t2.starttime, (select top 1 t1.endtime from tablecte t1 where t1.endtime > t2.starttime and t1.formname = t2.formname) as endtime from tablecte t2
)
select AVG(starttime - endtime) from combine
答案 1 :(得分:0)
首先,我按identifier
对所有记录进行分组,并在 Gordon Linoff 的帮助下使用以下查询分隔starttime
和endtime
。答案是Here。
我使用的查询:
with f1 as (
select (case when f.eventid=5 then f.timestamps end) as starttime,
(case when f.eventid=6 then f.timestamps end) as endtime,
f.instanceidentifier as identifier,
f.formid as formid,
f.formname as formname
from frarecord f
)
select min(starttime) as starttime, max(endtime) as endtime, identifier
from f1
group by identifier
在运行上面的查询后,我得到了以下输出:
现在我可以计算减去以下方式之后的平均时间(我有时间完成)。
time = endTime - startTime
计算平均值的完整查询如下:
select AVG (endtime-starttime) as average from
(
with f1 as (
select (case when f.eventid=5 then f.timestamps end) as starttime,
(case when f.eventid=6 then f.timestamps end) as endtime,
f.instanceidentifier as identifier,
f.formid as formid,
f.formname as formname
from frarecord f
)
select min(starttime) as starttime, max(endtime) as endtime, identifier
from f1
group by identifier
)