2015-10-20 250 views
0

我有一個數據集(在這種情況下查詢)那種看起來像這樣的合計值的值:選擇基於另一列

ZipCode Territory  Date 
---------------------------------- 
12345 Unknown   9/30/2015 
12345 Unknown   9/25/2015 
12345 Istanbul  9/20/2015 
12345 Istanbul  9/10/2015 
12345 Unknown   9/5/2015 
12345 Istanbul  8/31/2015 
12345 Istanbul  8/21/2015 
12345 Unknown   8/16/2015 
12345 Constantinople 8/11/2015 
12345 Constantinople 8/1/2015 
12345 Constantinople 7/22/2015 
12345 Constantinople 7/12/2015 

我想返回最大日期和每個郵政編碼的地區名稱(每個郵政編碼一行)。最終的結果我希望從前面的查詢就會變成這樣:

ZipCode Territory Date 
---------------------------------- 
12345 Istanbul 9/20/2015 

我現在最大的努力只拿到了我在這裏:

ZipCode Territory  Date 
--------------------------------- 
12345 Istanbul  9/20/2015 
12345 Constantinople 8/11/2015 

幫助!這是我的SQL寫作能力的巨大差距。

+0

'SELECT TOP 1'然後將查詢您目前有看起來像它會工作 –

+0

你可能有兩個地區預選賽的最大日期。那麼你想怎麼做? –

+0

您說_...返回每個郵政編碼的最大日期和地區名稱**(每個郵政編碼一行)** _...但您的預期輸出只包含一行。你能改正你的問題或更好地解釋嗎? –

回答

1

你需要兩個查詢。

第一個檢索最大日期。

SELECT Zipcode, Max([Date]) AS MaxDate FROM <TableName> Group BY Zipcode 

讓我們將這個查詢保存爲qryMaxDateForZipCode

第二查詢領土該日期。

SELECT ZipCode, Territory FROM qryMaxDateForZipCode 
INNER JOIN <TableName> ON qryMaxDateForZipCode.MaxDate = <TableName>.[Date] 

但是,您可能有兩個地區符合最高日期。那麼你想怎麼做?

+0

謝謝E Mett,雖然看起來很簡單,但這是一個巨大的幫助。 – ChrisG

0

這可能幫助(?):

Select ZipCode, MAX(Territory), Max([Date]) AS [Date] 
Group By ZipCode 
1

這本質上是一個最大的正每組問題。按郵政編碼分組您的數據以獲取每個郵政編碼的最新日期。然後與您的數據匹配的郵政編碼,最新的日期對:

SELECT YourTable.* 
FROM YourTable 
INNER JOIN (
    SELECT ZipCode, MAX(Date) AS Date_Max 
    FROM YourTable 
    WHERE Territory <> 'Unknown' 
    GROUP BY ZipCode 
) AS TempGroup ON 
     YourTable.ZipCode = TempGroup.ZipCode 
    AND YourTable.Date = TempGroup.Date_Max 

結果(MS-Access 2007中測試):

ZipCode Territory Date 
---------------------------------- 
12345 Istanbul 9/20/2015 
+0

感謝Salman A的迴應,但伊斯坦布爾和君士坦丁堡有相同的郵政編碼,我正在尋找每個郵政編碼的最大日期和最後已知地區名稱。 – ChrisG