子查询/连接在同一个表上

Ton*_*son 3 sql sql-server join subquery

我有一个如下所示的表格

tbl_veh

VIN         Record    DateChange
11223344      123A    6/24/2012
11223344      121G    7/20/2013
11223344      2D54    2/24/2013
55445588      44D4    2/27/2012
55445588      855D    3/15/2013
Run Code Online (Sandbox Code Playgroud)

所以我想选择VIN并记录,但仅限于最近的日期.我该怎么办?

所以我会回来

11223344 and 121G
55445588 and 855D          
Run Code Online (Sandbox Code Playgroud)

And*_*zov 5

试试这个:

WITH [ranked] AS (
     SELECT VIN, Record, RANK() OVER(PARTITION BY VIN ORDER BY DateChange DESC, newid()) [rank]
     FROM tbl_veh)

SELECT VIN, Record
FROM [ranked]
WHERE [rank] = 1;
Run Code Online (Sandbox Code Playgroud)

或"不太复杂"的版本(不使用CTE):

SELECT VIN, Record
FROM (
    SELECT VIN, Record, RANK() OVER(PARTITION BY VIN ORDER BY DateChange DESC, newid()) [rank]
    FROM tbl_veh) as [ranked] 
WHERE [rank] = 1;
Run Code Online (Sandbox Code Playgroud)