选择基于另一列

问题描述:

我有一个数据集(在这种情况下查询)那种看起来像这样的合计值的值:选择基于另一列

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

您说_...返回每个邮政编码的最大日期和地区名称**(每个邮政编码一行)** _...但您的预期输出只包含一行。你能改正你的问题或更好地解释吗? –

你需要两个查询。

第一个检索最大日期。

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

这可能帮助(?):

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

这本质上是一个最大的正每组问题。按邮政编码分组您的数据以获取每个邮政编码的最新日期。然后与您的数据匹配的邮政编码,最新的日期对:

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