See if this example works for you?CREATE TABLE #Packs(Packuser INT, OrderId INT, PackDate DATETIME);INSERT INTO #packs VALUES(1,100, '2012-07-13 14:26:37.380'),(1,101, '2012-07-13 14:26:39.380'),(1,102, '2012-07-13 14:27:39.000'),(1,103, '2012-07-12 14:27:39.000'),(2,104, '2012-07-12 14:27:39.000'),(2,105, '2012-07-13 14:27:39.000'),(3,106, '2012-07-13 14:27:39.000'),(4,107, '2012-07-13 14:27:39.000'),(5,108, '2012-07-13 14:27:39.000'),(5,109, '2012-07-13 14:26:40.000')SELECT a.PackUser, a.OrderId, a.PackDate, b.OrderId AS AdjacentOrderId, b.PackDate AS AdjacentPackDateFROM #packs a CROSS APPLY ( SELECT TOP 1 b.OrderId, b.PackDate FROM #packs b WHERE b.PackUser = a.PackUser AND DATEDIFF(second,a.PackDate,b.PackDate) BETWEEN 0 AND 60 AND a.orderId <> b.OrderId AND DATEADD(dd,DATEDIFF(dd,0,b.PackDate),0) = DATEADD(dd,DATEDIFF(dd,0,GETDATE()),0) ORDER BY b.PackDate ASC ) b; DROP TABLE #packs;