2015-10-20 3 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 

Я хотел бы вернуть максимальную дату и KNOWN название территории для каждого почтового индекса (одна строка за zip-код). Конечный результат я бы ожидать от предыдущего запроса превратится в это:

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

Вы говорите _... верните максимальную дату и название территории ** для каждого почтового индекса (по одной строке на zipcode) ** _... но ваш ожидаемый результат содержит только одну строку. Не могли бы вы исправить свой вопрос или объяснить лучше? –

ответ

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

Спасибо, Метт, казалось бы, просто, это было огромной помощью. – 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

Смежные вопросы