我有一个包含以下字段的表
Name:
Location:
Start Time:
End Time:
Total Time:
从另一个表中提取名称,位置,开始和结束时间,总时间计算开始时间和结束时间之间的差异,以给出在该位置花费的总时间。使用查询查找用户在该位置的MAX和MIN时间来提取开始时间和结束时间。例如,典型的结果是:
Name: John
Location: A
Start Time: 08:00
End Time: 10:00
Total Time: 2:00
问题是用户可能在一个位置,转到另一个位置,然后返回到同一位置。例如,另一条记录可能是:
Name: John
Location: B
Start Time: 09:00
End Time: 09:30
Total Time: 0:30
因此,用户将在08:00-09:00的位置,然后在B 09:00-09:30,然后在09:30-10:00返回A.由于开始和结束时间仅为MIN和MAX,因此min始终是他们第一次进入该位置,而结束是他们最后一次进入该位置。有没有办法修改时间计算,以考虑在位置B花费的0:30分钟,并从位置A花费的时间中扣除。另一个注意事项是,最多可以有5个位置,用户可以返回他们每天都在他们之间。
答案 0 :(得分:0)
这是一个想法。以下查询返回每个用户在每个位置的时间量:
select name, location,
sum(datediff(s, starttime, endtime)) as TotalTimeInSeconds
from t
group by name, location
如果您没有所有开始和结束时间的单独记录,则需要返回原始表格。
如果你不能回到原始数据,那么你可以通过繁琐的自我加入来做到这一点:
select t.name, t.location,
min(TotalTime) - sum(t2.totalTime)
from t left outer join
t t2
on t.name = t.name and
t.location <> t2.location and
t2.starttime between t.starttime and t.endtime
group by t.name, t.location
但是,我不建议这样做,因为它需要大量处理。