Átlagos időpont time adattípusra

A mai napi agymenés 😁 Szüksége volt valakinek egy átlagszámításra... igen ám de time adattípusra. Az SQL Server nem igazán enged erre átlagot számolni, így meg kellett írni. A time típust nem igazán lehet konvertálni se float se int típusra - amik már használhatóak lennének az AVG függvénynek, így ez még egy kicsit bonyolítja a helyzetet, de 1 percnyi gondolkodás után 2 megoldásom is született:

 1USE tempdb;
 2GO
 3 
 4CREATE TABLE test
 5(
 6    EmployeeID int,
 7    Arrival time
 8);
 9GO
10 
11INSERT INTO test (EmployeeID, Arrival) VALUES (1, '11:15');
12INSERT INTO test (EmployeeID, Arrival) VALUES (1, '11:20');
13INSERT INTO test (EmployeeID, Arrival) VALUES (1, '11:40');
14INSERT INTO test (EmployeeID, Arrival) VALUES (1, '11:00');
15INSERT INTO test (EmployeeID, Arrival) VALUES (1, '11:00');
16 
17INSERT INTO test (EmployeeID, Arrival) VALUES (2, '22:33');
18INSERT INTO test (EmployeeID, Arrival) VALUES (2, '11:41');
19INSERT INTO test (EmployeeID, Arrival) VALUES (2, '08:40');
20INSERT INTO test (EmployeeID, Arrival) VALUES (2, '17:20');
21INSERT INTO test (EmployeeID, Arrival) VALUES (2, '12:51');
22GO
23--solution 1
24SELECT
25    EmployeeID,
26    CAST(DATEADD(ss, -AVG(DATEDIFF(ss,Arrival, '23:59:59')), '23:59:59') AS time)
27FROM
28    test
29GROUP BY
30    EmployeeID;
31--solution 2
32SELECT
33    EmployeeID,
34    CAST(CAST(AVG(CAST(CAST(Arrival as datetime) as float)) AS datetime) AS time)
35FROM
36    test
37GROUP BY
38    EmployeeID;

A második esetben érdemes a FLOOR függvényt is használni, mert előfordulhat, hogy több tizedesre fogja a datetime típust konvertálni. A kód úgy néz ki ahogy, sajnos. Kicsit "megerőszakolása" a time adattípusnak a dolog, de másként nem nagyon lehet ez megoldani. Bár ha valakinek van jobb megoldása, szívesen veszem.