如何获得正确的总时间值?

时间:2009-08-17 06:32:38

标签: ms-access

使用Access 2003

PersonID TotalHours

111    12.23.34
111    23.32.23
111    14.32.23
222    00:23:32
222    01:00:00

所以......,

TotalHours数据类型是日期时间

使用查询。

Select Personid, sum (TotalHours) from table group by personid.

显示

Personid TotalHours

111 4.30842592592593
222 7.93241898148148

等......,

我想在Sum(TotalHours)中显示正确的时间格式。喜欢(HH:MM:SS)

预期产出

Personid TotalHours

111 32:44:23
222 23:11:22

所以......,

需要查询帮助。

1 个答案:

答案 0 :(得分:1)

正在发生的事情是它总计了时间的数字表示

你可以这样做:

Select Personid, cdate(sum (TotalHours)) as GrandTotal
from table 
group by personid.

但是你会得到如下结果:

111   1900-01-01 2:28:10 AM
222              1:23:32 AM

这是因为Personalid 111超过24小时

你真正需要做的是将时间缩短到几秒钟;然后添加它们;然后再将其分解为小时/分钟/秒;我用两个查询做了这个

[time_1 definition]

SELECT time_tab.pid,
    Sum(Hour([time]) * 3600
    + Minute([time]) * 60
    + Second([time])) AS time_total
FROM time_tab
GROUP BY time_tab.pid;


[time_2 definition]

SELECT time_1.pid, 
    Int([time_total]/3600) AS h,  
    Int(([time_total]-Int([time_total]/3600) * 3600)/60) AS m, 
    [time_total]
        - (Int(([time_total]-Int([time_total]/3600) * 3600)/60)*60 
            + (Int([time_total]/3600)*3600)) AS s
FROM time_1

给了我

111   50  28  10
222   1   23  32

OR

[time_2 definition]

SELECT time_1.pid, 
    Int([time_total]/3600) & ":" 
        & Int(([time_total]-Int([time_total]/3600) * 3600)/60)  & ":" 
        & [time_total] 
            - (Int(([time_total]-Int([time_total]/3600) * 3600)/60) * 60
            + (Int([time_total]/3600)*3600)) AS grand_total
FROM time_1

给了我

111   50:28:10
222    1:23:32