2011-04-23 42 views
1

我有這樣的一個表:如何提取最新的排

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 

我想提取的最新行每個序列號

由於

回答

2

UPDATE:帶有日期

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

這裏的技巧是在Serial_No範圍內進行比較,實現這一目標的方法是使用Correlated Subquery,如下所示。

+0

我想象它的日期,而不是決定「最新行的」大小... – jswolf19 2011-04-23 08:33:12

+0

確定最新現在爲止,誤讀問題 – Peter 2011-04-23 08:34:30

+0

錯誤。 msg是:-Error:SQL5001 - 列限定符或表OUTER未定義。 – Bob 2011-04-23 09:02:53

-1

事情是這樣的:

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

這是錯的恐怕 – Peter 2011-04-23 08:41:52

+0

爲什麼? – CookieMonster 2011-04-23 08:42:12

+0

它選擇日期爲maxdate的所有行,completeley獨立於serialnr – Peter 2011-04-23 08:44:21

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 
+0

看起來過於複雜。 – Peter 2011-04-23 09:13:49