Разве не грубо удалить старое сообщение без предупреждения, потому что требования изменились? Разве вы не можете просто закрыть его, чтобы люди не задавались вопросом, что случилось?
В любом случае, вот обновленный ответ:
SELECT Foo.*
FROM Foo
JOIN (
SELECT FooId, MAX(CreatedTime)
FROM Foo Q
-- Only change the dates in the next line.
WHERE Q.CreatedTime >= '20000101' AND Q.CreatedTime < '20000102'
GROUP BY Q.FooId, DATEADD(day, DATEDIFF(day, '19000101', Q.CreatedTime), '19000101')
) Q2 (FooID, CreatedTime) ON Q2.FooID = Foo.FooID AND Q2.CreatedTime = Foo.CreatedTime
ORDER BY FooID
Результаты
FooId Data CreatedTime
1 C 2000-01-02 12:25:00.000
2 B 2000-01-02 12:26:00.000
3 A 2000-01-02 12:00:00.000
DDL
CREATE TABLE Foo (FooId int NOT NULL, Data varchar(10), CreatedTime datetime NOT NULL)
INSERT INTO Foo VALUES (1, 'A', '2000-01-01 12:00:00')
INSERT INTO Foo VALUES (1, 'B', '2000-01-01 12:12:00')
INSERT INTO Foo VALUES (1, 'C', '2000-01-01 12:25:00')
INSERT INTO Foo VALUES (2, 'A', '2000-01-01 12:00:00')
INSERT INTO Foo VALUES (2, 'B', '2000-01-01 12:26:00')
INSERT INTO Foo VALUES (3, 'A', '2000-01-01 12:00:00')
INSERT INTO Foo VALUES (1, 'A', '2000-01-02 12:00:00')
INSERT INTO Foo VALUES (1, 'B', '2000-01-02 12:12:00')
INSERT INTO Foo VALUES (1, 'C', '2000-01-02 12:25:00')
INSERT INTO Foo VALUES (2, 'A', '2000-01-02 12:00:00')
INSERT INTO Foo VALUES (2, 'B', '2000-01-02 12:26:00')
INSERT INTO Foo VALUES (3, 'A', '2000-01-02 12:00:00')