根据另一列

时间:2015-10-20 04:32:45

标签: sql ms-access ms-access-2010

我有一个数据集(在这种情况下是查询),看起来像这样:

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写作能力的巨大差距。

3 个答案:

答案 0 :(得分:2)

您需要两个查询。

第一个检索最大日期。

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]

但是,您可能有两个地区符合最长日期。那你想做什么?

答案 1 :(得分: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

答案 2 :(得分:0)

这可能会有所帮助(?):

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