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:
USE tempdb;
GO
CREATE TABLE test
(
EmployeeID int,
Arrival time
);
GO
INSERT INTO test (EmployeeID, Arrival) VALUES (1, '11:15');
INSERT INTO test (EmployeeID, Arrival) VALUES (1, '11:20');
INSERT INTO test (EmployeeID, Arrival) VALUES (1, '11:40');
INSERT INTO test (EmployeeID, Arrival) VALUES (1, '11:00');
INSERT INTO test (EmployeeID, Arrival) VALUES (1, '11:00');
INSERT INTO test (EmployeeID, Arrival) VALUES (2, '22:33');
INSERT INTO test (EmployeeID, Arrival) VALUES (2, '11:41');
INSERT INTO test (EmployeeID, Arrival) VALUES (2, '08:40');
INSERT INTO test (EmployeeID, Arrival) VALUES (2, '17:20');
INSERT INTO test (EmployeeID, Arrival) VALUES (2, '12:51');
GO
--solution 1
SELECT
EmployeeID,
CAST(DATEADD(ss, -AVG(DATEDIFF(ss,Arrival, '23:59:59')), '23:59:59') AS time)
FROM
test
GROUP BY
EmployeeID;
--solution 2
SELECT
EmployeeID,
CAST(CAST(AVG(CAST(CAST(Arrival as datetime) as float)) AS datetime) AS time)
FROM
test
GROUP BY
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.