子查询/在同一张表上进行连接

3

我有一张表格长这样

表格 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

我希望选择VIN和记录,但仅限于最近的日期。我该怎么做?
所以我将会得到:
11223344 and 121G
55445588 and 855D          

你只想要最近的两条记录? - Ran Eldan
不要所有的记录。我手头的表格有数百条记录,这只是一个样本。 - Tony Larson
“但仅适用于最近的日期” - 您如何确定哪个是最近的日期? 11223344和121G以及55445588和855D具有不同的日期。 - Ran Eldan
@RanEldan - 我认为他的意思是给定VIN的最近日期。 - chue x
我使用MySQL作为我的数据库管理系统。 - Tony Larson
显示剩余2条评论
2个回答

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;

或者“不使用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;

这很复杂,我不太理解,但它能正常工作。谢谢。 - Tony Larson
完全没有问题。我添加了一个更简单的版本 :) - Andrey Morozov

1

试试这个?这仅适用于每个vim文件只有一个日期更改的情况。如果您有多个日期更改,则需要进行更改。

Select tbl_veh.vin, tbl_veh.record
From tbl_veh
Inner join (select vin, max(Datechange) 
            from tbl_veh
             group by vin
            ) last 
     On last.vin = tbl_veh.vin

我希望这个能够工作,但它不喜欢语法。 - Tony Larson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接