• the below SQL should do what you need and also covers when people login and out multiple times.

    I have assumed if they havent logged out they are still logged in

    IF EXISTS (SELECT *

    FROM tempdb.dbo.sysobjects o

    WHERE o.xtype IN ('U')

    AND o.id = OBJECT_ID(N'tempdb..##TlbLog'))

    DROP TABLE ##TlbLog

    CREATE TABLE ##TlbLog

    (

    ID INT

    ,UserID INT

    ,Purpose VARCHAR(20)

    ,DateCreated DATETIME

    )

    INSERT INTO ##TlbLog

    (ID, UserID, Purpose, DateCreated) VALUES

    (1, 500, 'login' ,'2013-03-24 14:39:43.273')

    ,(2, 501, 'login' ,'2013-03-24 14:39:43.277')

    ,(3, 502, 'login' ,'2013-03-24 14:39:43.277')

    ,(4, 503, 'login' ,'2013-03-24 14:39:43.277')

    ,(5, 500, 'logout' ,'2013-03-24 14:44:43.280')

    ,(6, 501, 'logout' ,'2013-03-24 14:44:43.280')

    ,(2, 501, 'login' ,'2013-03-24 14:55:43.277')

    ,(6, 501, 'logout' ,'2013-03-24 15:55:43.280')

    SELECT li.UserID

    , SUM( DATEDIFF(mi, li.DateCreated, CASE WHEN lo.DateCreated IS NULL THEN GETDATE() ELSE lo.DateCreated END ) )TotalTime

    FROM (

    SELECT ID

    , UserID

    , Purpose

    , DateCreated

    , ROW_NUMBER() OVER (PARTITION BY UserID ORDER BY DateCreated ) Rnum

    FROM ##TlbLog

    WHERE Purpose = 'login' ) li

    LEFT JOIN (

    SELECT ID

    , UserID

    , Purpose

    , DateCreated

    , ROW_NUMBER() OVER (PARTITION BY UserID ORDER BY DateCreated ) Rnum

    FROM ##TlbLog

    WHERE Purpose = 'logout' ) lo ON li.UserID = lo.UserID AND li.Rnum = lo.Rnum

    GROUP BY li.UserID