If you're on SQL Server, you can try the following TSQL block. It uses a cursor to traverse those rows which have more than 1 hour between start and end times, and iterates through, adding the individual "hours" into a @gamesTable table variable.
Once the cursor is done and has populated records into the @gamesTable variable, a SELECT statement against the original table for those rows which have 1 or less hours between start and end times is unioned to all the rows that were stored into @gamesTable.
DECLARE Game_Cursor CURSOR FOR
SELECT *
FROM summaryTable
WHERE EndTime - StartTime > 1
OPEN Game_Cursor;
DECLARE @PlayerID char
DECLARE @StartTime int
DECLARE @EndTime int
DECLARE @TempEndTime int
DECLARE @gamesTable TABLE(PlayerID char, StartTime int, EndTime int)
--Fetch the first row
FETCH NEXT FROM Game_Cursor INTO @PlayerID, @StartTime, @EndTime
WHILE @@FETCH_STATUS = 0
BEGIN
WHILE (@EndTime - @StartTime) > 0
BEGIN
SET @TempEndTime = @StartTime + 1
INSERT INTO @gamesTable
SELECT @PlayerID AS PlayerID, @StartTime AS StartTime, @TempEndTime AS EndTime
SET @StartTime = @StartTime + 1
END;
--Fetch the next row
FETCH NEXT FROM Game_Cursor INTO @PlayerID, @StartTime, @EndTime
END;
--Rid of the cursor
CLOSE Game_Cursor;
DEALLOCATE Game_Cursor;
--Output the results
SELECT * FROM summaryTable WHERE (EndTime - StartTime) <= 1
UNION ALL
SELECT * FROM @gamesTable