如何提取最新的行

时间:2011-04-23 08:24:05

标签: sql

我有一张这样的表:

Item    Serial_No   Grade   Size    Location    Date
CQ35    A243911     4   36  A           20110127
CQ35    A243911     4   36  B           20110329
CQ35    A243911     4   36  C           20110330
CQ38    A244567     3   38  A           20110127
CQ35    A244567     3   38  B           20110128
CQ38    A244567     3   38  C           20110129
CQ35    A244567     3   38  D           20110130
CQ40    A244568     3   41  A           20110127
CQ40    A244568     3   41  B           20110129
CQ36    A244570         2   37  A           20110125

预期的结果shd看起来像使用SQL:

Item    Serial_No   Grade   Size    Location    Date
CQ35    A243911     4   36  C           20110330
CQ35    A244567     3   38  D           20110130
CQ40    A244568     3   41  B           20110129
CQ36    A244570         2   37  A           20110125

我正在尝试提取每个序列号的最新行。

谢谢

3 个答案:

答案 0 :(得分:2)

更新:日期

select * 
from table as outertable
where date = (select max(date) from table where Serial_No = outertable.Serial_No)

这里的诀窍是仅在Serial_No范围内进行比较,实现此目的的方法是使用此处所示的Correlated Subquery

答案 1 :(得分:0)

这假设每个日期和序列号只有一个条目。

SELECT MyTable.*
FROM MyTable
INNER JOIN (SELECT SerialNo, MAX(Date)
    FROM MyTable
    GROUP BY SerialNo) AS MyTableLatest ON MyTable.SerialNo = MyTableLatest.SerialNo
        AND MyTable.Date = MyTableLatest.Date

答案 2 :(得分:-1)

这样的事情:

SELECT *
FROM table
WHERE Date
IN (
SELECT MAX( Date )
FROM table
GROUP BY Serial_No
)