• Sure, here you go:

    CREATE TABLE Request

    (

    RequestId INT NOT NULL,

    EmailAddress VARCHAR(50) NOT NULL

    );

    CREATE TABLE Quote

    (

    QuoteId INT NOT NULL,

    RequestId INT NOT NULL,

    CreatedAt DATETIME NOT NULL

    );

    INSERT INTO Request VALUES (1, 'joe@bloggs.com');

    INSERT INTO Request VALUES (2, 'bob@bloggs.com');

    INSERT INTO Quote VALUES (1,1,'2012-09-04 14:00');

    INSERT INTO Quote VALUES (2,1,'2012-09-04 14:30');

    INSERT INTO Quote VALUES (3,1,'2012-09-05 12:51');

    INSERT INTO Quote VALUES (4,1,'2012-11-09 09:00');

    INSERT INTO Quote VALUES (5,1,'2012-11-09 11:00');

    INSERT INTO Quote VALUES (6,2,'2012-09-04 15:00');

    INSERT INTO Quote VALUES (7,2,'2012-09-04 15:00');

    INSERT INTO Quote VALUES (8,2,'2012-12-30 19:30');

    INSERT INTO Quote VALUES (9,2,'2012-12-30 19:30');

    SELECT

    r.RequestId

    ,q.QuoteId

    ,r.EmailAddress

    ,q.CreatedAt

    ,CASE

    WHEN DATEDIFF(dd,LAG(q.CreatedAt,1) OVER (PARTITION BY r.EmailAddress ORDER BY q.CreatedAt),q.CreatedAt) > 30

    THEN 1

    ELSE 0

    END AS GroupResetFlag

    ,DENSE_RANK() OVER(PARTITION BY r.EmailAddress ORDER BY q.CreatedAt) AS InitialRank

    FROM

    Request r

    INNER JOIN Quote q

    ON r.RequestId = q.RequestId

    ORDER BY

    r.EmailAddress

    ,q.CreatedAt;

    I've included a slightly modified query to use the created tables.