I am creating a query to keep track of students’ activity at school on MS Acces 2010. And I have a table as follows:
x
ID | Date | ActivityCode | Starttime | Endtime | Duration
----------------------------------------------------------
1234 | 1/1/2020 | a | AM | AM | #(= 3Hours / Total number of AM per person per day)
1234 | 1/1/2020 | a | AM | AM | #In this case, Duration = 3/2 = 1.5 hr
9876 | 1/1/2020 | a | AM | AM |#(= 3Hours / Total number of AM per person per day)
9876 | 1/1/2020 | a | AM | AM | #In this case, Duration = 3/3 = 1 hr
9876 | 1/1/2020 | a | AM | AM | #In this case, Duration = 3/3 = 1 hrs
9876 | 1/1/2020 | a | 1200 | 1500 | #In this case, Duration = 1500-1200 = 3 hrs
My current attempt on getting the duration
IIF(starttime="AM" or starttime="PM",
#(= 3Hours / Total number of AM per person per day),
CDate(TimeSerial(Val([EndTime])100,Val([EndTime]) Mod 100,0)-
TimeSerial(Val([starttime])100,Val([starttime]) Mod 100,0)))
AS Duration,
But I am not sure how to write the #(= 3Hours / Total number of AM per person per day) part in SQL. Any help is appreciated.
Advertisement
Answer
Try with:
Select ID, [Date], 3/Count(*) As Duration
From YourTable
Group By ID, [Date]
Edit – with time values:
Select
ID,
[Date],
IIF(
[StartTime] = 'AM' Or [StartTime] = 'PM',
3/Count(*),
(TimeSerial(Val([EndTime])100,Val([EndTime]) Mod 100,0)-TimeSerial(Val([starttime])100,Val([starttime]) Mod 100,0))*24
) As Duration
From
YourTable
Group By
ID,
[Date]