Select 基于另一列的聚合值的值
Select a value based on the aggregate value of another column
我有一个看起来像这样的数据集(在本例中是查询):
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
我想 return 每个邮政编码的最大日期和 已知 地区名称(每个邮政编码一行)。我期望从上一个查询得到的最终结果会变成这样:
ZipCode Territory Date
----------------------------------
12345 Istanbul 9/20/2015
我目前的最大努力只让我来到这里:
ZipCode Territory Date
---------------------------------
12345 Istanbul 9/20/2015
12345 Constantinople 8/11/2015
求助!这是我 SQL 写作能力的巨大差距。
这可能有帮助 (?):
Select ZipCode, MAX(Territory), Max([Date]) AS [Date]
Group By ZipCode
这基本上是每组最多 n 个问题。按邮政编码对数据进行分组,以获取每个邮政编码的最新日期。然后将邮政编码-最新日期对与您的数据匹配:
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
您需要两个查询。
第一个检索最大日期。
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]
但是,您可能有两个地区符合最大日期的条件。那你想做什么?
我有一个看起来像这样的数据集(在本例中是查询):
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
我想 return 每个邮政编码的最大日期和 已知 地区名称(每个邮政编码一行)。我期望从上一个查询得到的最终结果会变成这样:
ZipCode Territory Date
----------------------------------
12345 Istanbul 9/20/2015
我目前的最大努力只让我来到这里:
ZipCode Territory Date
---------------------------------
12345 Istanbul 9/20/2015
12345 Constantinople 8/11/2015
求助!这是我 SQL 写作能力的巨大差距。
这可能有帮助 (?):
Select ZipCode, MAX(Territory), Max([Date]) AS [Date]
Group By ZipCode
这基本上是每组最多 n 个问题。按邮政编码对数据进行分组,以获取每个邮政编码的最新日期。然后将邮政编码-最新日期对与您的数据匹配:
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
您需要两个查询。
第一个检索最大日期。
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]
但是,您可能有两个地区符合最大日期的条件。那你想做什么?