CREATE TABLE #t(ID INT IDENTITY(1,1),USERNAME VARCHAR(10),POINTS INT,DATESTMP DATETIME,grp INT,DATESTMPADDED DATETIME)
INSERT INTO #t(USERNAME,POINTS,DATESTMP)
VALUES
('USER1',50,'2014-01-16 23:59:03'),('USER1',22, '2014-01-17 00:01:04'),('USER1', 16, '2014-01-17 00:19:17'),
('USER1', 11, '2014-01-31 15:12:00'),
('USER1' , 34 , '2014-01-31 15:19:34')
CREATE TABLE #t2(ID INT,USERNAME VARCHAR(10),POINTS INT,DATESTMP DATETIME,grp INT,DATESTMPADDED DATETIME)
INSERT INTO #t2
SELECT * FROM #t
UPDATE #t SET DATESTMPADDED = DATEADD(minute,30,DATESTMP)
DECLARE @id int = 1
,@keeper INT = 1
,@timestamp_added DATETIME = NULL
,@timestamp_old DATETIME = NULL
,@grpId int = 1
WHILE(@keeper < 5)
BEGIN
SELECT @timestamp_added = DATESTMPADDED FROM #t WHERE #t.ID =@id
UPDATE #t2 SET grp = @grpId WHERE #t2.DATESTMP < @timestamp_added and grp IS NULL
SET @id = @@ROWCOUNT + 1
SET @grpId = @grpId + 1
SET @keeper = @keeper + 1
END
SELECT * FROM #t
SELECT ID,grp FROM #t2
SELECT USERNAME,SUM(POINTS) _points
FROM #t2
GROUP BY USERNAME,grp
drop table #t,#t2