在访问中使用日期/时间字段的MIN和MAX

时间:2013-01-22 15:11:25

标签: ms-access datetime

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

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个位置,用户可以返回他们每天都在他们之间。

1 个答案:

答案 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

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