0

我有一个包含以下字段的表

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 到达位置 A,然后在 09:00-09:30 在 B 中,然后在 09:30-10:00 回到 A。由于开始和结束时间只是 MIN 和 MAX,因此 min 始终是他们第一次进入该位置,而 end 是他们最后一次进入该位置。有没有办法修改时间计算以考虑在位置 B 花费的 0:30 分钟并从在位置 A 花费的时间中扣除这一点。另一个注意事项是最多可能有 5 个位置,用户可以返回并全天在他们每个人之间来回奔波。

4

1 回答 1

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

但是,我不建议这样做,因为它需要大量处理。

于 2013-01-22T16:33:58.240 回答