• DECLARE @T1 TABLE(ID INT, Dept CHAR(3), Cat INT)

    INSERT INTO @T1(ID,Dept,Cat)

    VALUES

    (1, 'WER', 2),

    (2, 'TTR', 7);

    DECLARE @T2 TABLE(ID INT, [Date] DATE, Type CHAR(2))

    INSERT INTO @T2(ID, [Date], Type)

    VALUES

    (1, '2013-07-01', 'GA'),

    (2, '2013-07-04', 'FS'),

    (2, '2013-07-08', 'TR'),

    (2, '2013-07-01', 'TT'),

    (1, '2013-04-05', 'RT'),

    (1, '2013-05-13', 'GG'),

    (2, '2013-04-18', 'TT');

    WITH CTE AS (

    SELECT t1.ID,

    t1.Cat,

    t2.[Date],

    t2.Type,

    ROW_NUMBER() OVER(PARTITION BY t1.ID ORDER BY t2.[Date]) AS rn,

    ROW_NUMBER() OVER(PARTITION BY t1.ID ORDER BY t2.[Date] DESC) AS rnRev

    FROM @T1 t1

    INNER JOIN @T2 t2 ON t2.ID = t1.ID)

    SELECT ID,

    Cat,

    MIN([Date]) AS FirstDate,

    MAX(CASE WHEN rn=1 THEN Type END) AS FirstType,

    MAX([Date]) AS LastDate,

    MAX(CASE WHEN rnRev=1 THEN Type END) AS LastType

    FROM CTE

    GROUP BY ID, Cat;

    ____________________________________________________

    Deja View - The strange feeling that somewhere, sometime you've optimised this query before

    How to get the best help on a forum

    http://www.sqlservercentral.com/articles/Best+Practices/61537