Select custfirst, custlast, first_order_id, first_orderdate, first_order_total_items, first_order_total_cost last_orderdate, last_order_id, last_orderdate, last_order_total_items, last_order_total_cost from custmer where custid in (select max(orderdate) as last_orderdate from orders group by custid, orderdate order by orderdate DESC) OR custid in (select min(orderdate) as first_orderdate from orders group by custid, orderdate)
with FOrdersas ( select CustId ,Ro = Row_Number() over ( partition by CustId order by OrderDate asc ) ,FirstOrderId = OrderId ,FirstOrderDate = OrderDate ) ,LOrdersas ( select CustId ,Ro = Row_Number() over ( partition by CustId order by OrderDate desc ) ,LastOrderId = OrderId ,LastOrderDate = OrderDate )select c.CustId ,FOrders.FirstOrderDate ,FOrders.FirstOrderId ,LOrders.LastOrderDate ,LOrders.LastOrderId ,from Customer cleft join FOrders on c.CustId = FOrders.CustIdleft join LOrders on c.CustId = LOrders.CustIdwhere ( FOrders.ro = 1 or FOrders.ro is null ) and ( LOrders.ro = 1 or LOrders.ro is null )
CREATE TABLE #Customer (CustID VARCHAR(10) ,OrderDate DATETIME)INSERT INTO #CustomerSELECT 'A', '2012-01-31' UNION ALL SELECT 'A', '2012-03-31' UNION ALL SELECT 'A', '2012-05-15'UNION ALL SELECT 'B', '2012-03-31' UNION ALL SELECT 'B', '2012-05-31' UNION ALL SELECT 'B', '2012-07-15'SELECT CustID, OrderDate -- Include other fields you want returned hereFROM ( SELECT CustID, OrderDate -- Include other fields you need here ,a=MIN(OrderDate) OVER (PARTITION BY CustID) ,b=MAX(OrderDate) OVER (PARTITION BY CustID) FROM #Customer) aWHERE a = OrderDate OR b = OrderDateDROP TABLE #Customer