MS Access:查询中大于 24 小时的求和时间再次从 1 重新开始
MS Access: Summing time greater than 24 hours in query restarts from 1 again
我在 MS Access 程序中有一个 table trans_hist,其中时间以短日期格式存储 "HH:MM" 例如:
[![图片][1]][1]
现在我已经创建了一个查询,它告诉每个用户的总时间(只是简单地总结时间)但是如果总时间超过 24 小时然后它会重置并从 00:15 重新开始(所有时间都是以 15 分钟为间隔存储)
问题:对于客户 (UID) 1,总时间应该是 32:30 但是它显示 8:30
当前结果:
UID Time_Elapsed
1 5:00
1 8:30
1 9:00
1 6:00
2 2:15
2 2:00
3 1:15
5 4:00
1 4:00
结果:
[![图片][2]][2]
- 数据
Cust_UIDTrans_DateAgen_NameProg_NamePrime_ServPrime_Serv_Time
10014 2015 年 12 月 13 日 LAC RA BMC 01:00
10021 2015 年 12 月 14 日 LAC RA AP 01:00
10022 2015 年 12 月 15 日 LAC RA AP 01:00
10021 2015 年 12 月 16 日 LAC RA SM 00:45
10020 2015 年 12 月 17 日 LAC RA AP 01:00
10027 2015 年 12 月 18 日 LAC RA DA 00:15
10028 2015 年 12 月 18 日 LAC RA DA 00:15
10026 2015 年 12 月 18 日 LAC RA DA 00:15
10029 2015 年 12 月 18 日 LAC RA DA 00:15
10030 2015 年 12 月 18 日 LAC RA DA 00:15
10031 2015 年 12 月 18 日 LAC RA DA 00:15
10023 2015 年 12 月 19 日 LAC RA 临床 02:00
10023 2015 年 12 月 20 日 LAC RA 临床 01:30
10023 2015 年 12 月 20 日 LAC RA 临床 02:00
10020 2015 年 12 月 21 日 LAC RA SM 00:15
10023 2015 年 12 月 21 日 LAC RA SM 00:30
10022 2015 年 12 月 22 日 LAC RA 临床 00:30
10022 2015 年 12 月 22 日 LAC RA IB 00:30
10021 2015 年 12 月 22 日 LAC RA IB 00:30
10009 22-Dec-15 LAC RA IB 00:30
10019 23-Dec-15 LAC RA STM 00:45
10009 23-Dec-15 LAC RA 工作人员 - 00:30
10021 2015 年 12 月 23 日 LAC RA 工作人员 - 00:30
10022 2015 年 12 月 23 日 LAC RA 工作人员 - 00:30
10024 2015 年 12 月 23 日 LAC RA 工作人员 - 00:30
10033 2015 年 12 月 23 日 LAC RA 工作人员 - 00:30
10025 2015 年 12 月 23 日 LAC RA 临床 00:45
10035 28-Dec-15 LAC OA CA 05:00
10040 28-Dec-15 LAC OA CA 05:00
10039 28-Dec-15 LAC OA CA 05:00
10038 28-Dec-15 LAC OA CA 05:00
10042 28-Dec-15 LAC OA CA 05:00
10036 2015 年 12 月 28 日 LAC OA CA 05:00
10037 2015 年 12 月 28 日 LAC OA CA 05:00
10006 2015 年 12 月 30 日 LAC 测试 1 DA 01:45
10005 2015 年 12 月 30 日 LAC 测试 2 DG 01:45
10015 2015 年 12 月 30 日 LAC 测试 2 IB 02:15
10015 2015 年 12 月 30 日 LAC 测试 4 DG 03:15
10019 2015 年 12 月 30 日 LAC OA CA 15:30
10005 2015 年 12 月 31 日 LAC OA CA 12:00
[数据][3]
结果
Prog_Name Prime_Serv Total_Serv_Time
OA CA 62:30
RA AP 3:0
RA BMC 1:0
RA 临床 7:45
RA DA 2:30
RA IB 2:30
RA 员工 - 在 2:30
RA SM 2:30
RA STM 1:45
测试 1 DA 2:45
测试 2 DG 2:45
测试 2 IB 2:15
测试 4 DG 3:15
[结果][4]
试试这个。
SELECT UID, switch (
t>1 , '00:15'
,true,format(t,'hh:mm')
) as Time_Elapsed from
(
SELECT UID, sum(Time_Elapsed) as t
From Table1
Group By UID
)
我希望这个 SQL 查询对您有所帮助:
SELECT T.UID,
CSTR(total_hours
+ INT(total_min / 60))
+ ":"
+ CSTR(total_min Mod 60) as result
FROM
(SELECT UID,
SUM(HOUR(TH.time_elapsed)) AS total_hours,
SUM(MINUTE(TH.time_elapsed)) AS total_min
FROM trans_hist AS TH
GROUP BY UID) AS T
使用这样的函数:
Public Function FormatHourMinute( _
ByVal datTime As Date, _
Optional ByVal strSeparator As String = ":") _
As String
' Returns count of days, hours and minutes of datTime
' converted to hours and minutes as a formatted string
' with an optional choice of time separator.
'
' Example:
' datTime: #10:03# + #20:01#
' returns: 30:04
'
' 2005-02-05. Cactus Data ApS, CPH.
Dim strHour As String
Dim strMinute As String
Dim strHourMinute As String
strHour = CStr(Fix(datTime) * 24 + Hour(datTime))
' Add leading zero to minute count when needed.
strMinute = Right("0" & CStr(Minute(datTime)), 2)
strHourMinute = strHour & strSeparator & strMinute
FormatHourMinute = strHourMinute
End Function
和一个简单的查询:
Select
UID,
FormatHourMinute(Sum([Time_Elapsed])) As TotalTime
From
trans_hist
Group By
UID
我在 MS Access 程序中有一个 table trans_hist,其中时间以短日期格式存储 "HH:MM" 例如:
[![图片][1]][1]
现在我已经创建了一个查询,它告诉每个用户的总时间(只是简单地总结时间)但是如果总时间超过 24 小时然后它会重置并从 00:15 重新开始(所有时间都是以 15 分钟为间隔存储)
问题:对于客户 (UID) 1,总时间应该是 32:30 但是它显示 8:30
当前结果:
UID Time_Elapsed
1 5:00
1 8:30
1 9:00
1 6:00
2 2:15
2 2:00
3 1:15
5 4:00
1 4:00
结果:
[![图片][2]][2]
- 数据
Cust_UIDTrans_DateAgen_NameProg_NamePrime_ServPrime_Serv_Time 10014 2015 年 12 月 13 日 LAC RA BMC 01:00 10021 2015 年 12 月 14 日 LAC RA AP 01:00 10022 2015 年 12 月 15 日 LAC RA AP 01:00 10021 2015 年 12 月 16 日 LAC RA SM 00:45 10020 2015 年 12 月 17 日 LAC RA AP 01:00 10027 2015 年 12 月 18 日 LAC RA DA 00:15 10028 2015 年 12 月 18 日 LAC RA DA 00:15 10026 2015 年 12 月 18 日 LAC RA DA 00:15 10029 2015 年 12 月 18 日 LAC RA DA 00:15 10030 2015 年 12 月 18 日 LAC RA DA 00:15 10031 2015 年 12 月 18 日 LAC RA DA 00:15 10023 2015 年 12 月 19 日 LAC RA 临床 02:00 10023 2015 年 12 月 20 日 LAC RA 临床 01:30 10023 2015 年 12 月 20 日 LAC RA 临床 02:00 10020 2015 年 12 月 21 日 LAC RA SM 00:15 10023 2015 年 12 月 21 日 LAC RA SM 00:30 10022 2015 年 12 月 22 日 LAC RA 临床 00:30 10022 2015 年 12 月 22 日 LAC RA IB 00:30 10021 2015 年 12 月 22 日 LAC RA IB 00:30 10009 22-Dec-15 LAC RA IB 00:30 10019 23-Dec-15 LAC RA STM 00:45 10009 23-Dec-15 LAC RA 工作人员 - 00:30 10021 2015 年 12 月 23 日 LAC RA 工作人员 - 00:30 10022 2015 年 12 月 23 日 LAC RA 工作人员 - 00:30 10024 2015 年 12 月 23 日 LAC RA 工作人员 - 00:30 10033 2015 年 12 月 23 日 LAC RA 工作人员 - 00:30 10025 2015 年 12 月 23 日 LAC RA 临床 00:45 10035 28-Dec-15 LAC OA CA 05:00 10040 28-Dec-15 LAC OA CA 05:00 10039 28-Dec-15 LAC OA CA 05:00 10038 28-Dec-15 LAC OA CA 05:00 10042 28-Dec-15 LAC OA CA 05:00 10036 2015 年 12 月 28 日 LAC OA CA 05:00 10037 2015 年 12 月 28 日 LAC OA CA 05:00 10006 2015 年 12 月 30 日 LAC 测试 1 DA 01:45 10005 2015 年 12 月 30 日 LAC 测试 2 DG 01:45 10015 2015 年 12 月 30 日 LAC 测试 2 IB 02:15 10015 2015 年 12 月 30 日 LAC 测试 4 DG 03:15 10019 2015 年 12 月 30 日 LAC OA CA 15:30 10005 2015 年 12 月 31 日 LAC OA CA 12:00
[数据][3]
结果
Prog_Name Prime_Serv Total_Serv_Time OA CA 62:30 RA AP 3:0 RA BMC 1:0 RA 临床 7:45 RA DA 2:30 RA IB 2:30 RA 员工 - 在 2:30 RA SM 2:30 RA STM 1:45 测试 1 DA 2:45 测试 2 DG 2:45 测试 2 IB 2:15 测试 4 DG 3:15
[结果][4]
试试这个。
SELECT UID, switch (
t>1 , '00:15'
,true,format(t,'hh:mm')
) as Time_Elapsed from
(
SELECT UID, sum(Time_Elapsed) as t
From Table1
Group By UID
)
我希望这个 SQL 查询对您有所帮助:
SELECT T.UID,
CSTR(total_hours
+ INT(total_min / 60))
+ ":"
+ CSTR(total_min Mod 60) as result
FROM
(SELECT UID,
SUM(HOUR(TH.time_elapsed)) AS total_hours,
SUM(MINUTE(TH.time_elapsed)) AS total_min
FROM trans_hist AS TH
GROUP BY UID) AS T
使用这样的函数:
Public Function FormatHourMinute( _
ByVal datTime As Date, _
Optional ByVal strSeparator As String = ":") _
As String
' Returns count of days, hours and minutes of datTime
' converted to hours and minutes as a formatted string
' with an optional choice of time separator.
'
' Example:
' datTime: #10:03# + #20:01#
' returns: 30:04
'
' 2005-02-05. Cactus Data ApS, CPH.
Dim strHour As String
Dim strMinute As String
Dim strHourMinute As String
strHour = CStr(Fix(datTime) * 24 + Hour(datTime))
' Add leading zero to minute count when needed.
strMinute = Right("0" & CStr(Minute(datTime)), 2)
strHourMinute = strHour & strSeparator & strMinute
FormatHourMinute = strHourMinute
End Function
和一个简单的查询:
Select
UID,
FormatHourMinute(Sum([Time_Elapsed])) As TotalTime
From
trans_hist
Group By
UID