Звучит как типичный минимум на группу, а в SQL Server это можно решить с помощью ROW_NUMBER:
SELECT Element, Time
FROM (
SELECT
Element, Time,
ROW_NUMBER() OVER(PARTITION BY Element ORDER BY Time) AS rn
FROM Movements
WHERE Room = 1 AND Time > '2010-06-01 00:30:00'
) T1
WHERE rn = 1
Пример результата:
Element Time
1 2010-06-01 02:00:00.000
2 2010-06-01 03:00:00.000
Данные испытаний:
CREATE TABLE Movements (RecID INT NOT NULL, Element INT NOT NULL, Time DATETIME NOT NULL, Room INT NOT NULL);
INSERT INTO Movements (RecID, Element, Time, Room) VALUES
(1, 1, '2010-06-01 00:00:00', 1),
(2, 1, '2010-06-01 01:00:00', 2),
(3, 1, '2010-06-01 02:00:00', 1),
(4, 2, '2010-06-01 03:00:00', 1),
(5, 2, '2010-06-01 04:00:00', 2),
(6, 1, '2010-06-01 05:00:00', 3),
(7, 2, '2010-06-01 06:00:00', 2);