开发者

retrieve the most recent record for each customer

开发者 https://www.devze.com 2023-04-06 10:12 出处:网络
I have this data: IDNAMEDATE 3JOHN2011-08-08 2YOKO2010-07-07 1JOHN2009-06-06 Code (for SQL Server 2005): DECLARE @TESTABLE TABLE (id int, name char(4), date smalldatetime)

I have this data:

ID   NAME   DATE
3    JOHN   2011-08-08
2    YOKO   2010-07-07
1    JOHN   2009-06-06

Code (for SQL Server 2005):

DECLARE @TESTABLE TABLE (id int, name char(4), date smalldatetime) 
INSERT INTO @TESTABLE VALUES (3, 'JOHN', '2011-08-08')
INSERT INTO @TESTABLE VALUES 开发者_StackOverflow(2, 'YOKO', '2010-07-07')
INSERT INTO @TESTABLE VALUES (1, 'JOHN', '2009-06-06')

I want to get, for each NAME, the ID that has the most recent DATE. Like this:

3    JOHN   2011-08-08
2    YOKO   2010-07-07

What is the most elegant way of accomplishing this?


;WITH x AS 
(
    SELECT ID, NAME, [DATE], 
      rn = ROW_NUMBER() OVER 
      (PARTITION BY NAME ORDER BY [DATE] DESC)
    FROM @TESTABLE
)
SELECT ID, NAME, [DATE] FROM x WHERE rn = 1
  ORDER BY [DATE] DESC;

Try to avoid reserved words (and vague column names) like [DATE]...


SELECT <fields>
FROM SourceTable st
INNER JOIN (SELECT name, MAX(Datefield) as Datefield
            FROM SourceTable
            GROUP BY name) x
    ON x.Name = st.name
    AND x.datefield = st.datefield


below is a possible solution:

Select c.CustomerID, c.CustomerName, c.CustomerOrder, c.CustomerOrderDate, c.CustomerQty
from tblCustomer c
inner join (select c2.CustomerName, MAX(c2.CustomerOrderDate) as MaxDate from tblCustomer c2 group by c2.CustomerName) c2
on c.CustomerName = c2.CustomerName
where c.CustomerOrderDate = c2.MaxDate
0

精彩评论

暂无评论...
验证码 换一张
取 消