在访问中使用日期/时间字段的最小值和最大值



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

Name:
Location:
Start Time:
End Time:
Total Time:
名称、位置、开始和结束时间是从

另一个表中提取的,总时间计算开始时间和结束时间之间的差值,以给出在该位置花费的总时间。开始和结束时间是使用查询提取的,该查询查找用户在该位置的最大和最小时间。例如,典型的结果是:

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
因此,用户将在位置 A 08:00-09:00,然后在 B 09:00-09:30,

然后返回到 A 09:30-10:00。由于开始和结束时间只是最小值和最大值,因此最小值始终是他们第一次进入该位置,结束时间是他们最后一次输入该位置的时间。有没有办法修改时间计算以考虑到在位置 B 花费的 0:30 分钟,并从在位置 A 花费的时间中扣除。另一个注意事项是,最多可以有 5 个位置,用户可以全天在每个位置之间来回切换。

这是一个想法。 以下查询返回每个用户在每个位置的时间量:

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

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

相关内容

  • 没有找到相关文章

最新更新