2013-06-27 6 views
1

Я работаю над запросом, и он меня бросает.Help Access Query Help (Запросить запрос)

У меня есть таблица с большим количеством предложений, и у них есть дата создания, когда предложение было добавлено в базу данных. Я хочу сделать запрос, основанный на пользователе, выбирающем состояние, а затем запрос показывает только последнее созданное предложение.

Пример:

У меня есть 4 предложения. 2 из Делавера, созданного 1 января 2013 года и 1/2/2013. Другие 2 предложения из Мэриленда созданы на 1/3/2013 и 1/4/2014. Если пользователь вводит данные в штате Делавэр, он должен показать предложение на 1/2/2013, но если пользователь вводит данные в Мэриленде, он должен показать это предложение на 1/4/2013.

Во-первых, я попытался это

SELECT * 
FROM Opportunity 
WHERE (((Opportunity.CreationDate)= 
    (select max(Opportunity.CreationDate) from Opportunity))); 

Это работает, он показывает мне 1 возможность, которая имеет самую последнюю дату. Итак, это половина битвы. но когда я пытался указать состояние, у меня возникают проблемы. Это Access, поэтому я подумал о создании запроса, который подскажет пользователю о состоянии, а затем перейдет во второй запрос, который будет запрашивать эти результаты для самого большого поля даты, но это не так. Итак, что у меня есть сейчас:

Запрос 1

Select * FROM Opportunity и имеет всплывающее окно появляется, который запрашивает у пользователя для государства. Затем он отображает все результаты для этого состояния.

Запрос 2

SELECT * FROM OpportunityByState WHERE (((OpportunityByState.CreationDate)=(select max(Opportunity.CreationDate) from Opportunity)));

Примечание: Я редактировал SQL, прежде чем отправлять сюда, чтобы использовать символ все поля (*), так как доступ выписал каждое поле и есть около 60 из них, так что я Бесполезный Думаю, кто-то захочет увидеть эту стену текста.

Любые предложения были бы замечательными, и я надеюсь, что предоставил достаточно информации.

ответ

1

С помощью всплывающего окна Предполагаю, что вы имеете в виду параметр доступа. В этом случае следующее будет отображать самую последнюю запись (записи) для состояния, введенного в появившемся окне параметра. (Я использую несколько полеев-имена из моей базы данных образца.)

SELECT TOP 1 FirstName, Surname, Office, StartDate 
FROM Opportunity 
WHERE State=[Which State] 
ORDER BY CreationDate DESC; 

Он упорядочивает записи в порядке CreationDate убывания, и захватывает первый. Однако, если в одной и той же дате будет более одной записи, она вернет все эти данные. (Это способ TOP n ведет себя в Access - он не разрешает дубликаты.)

+1

Один простой (но не гарантированный) способ уменьшить дубликаты, о которых вы упоминаете, - это сохранить дату и время в поле CreationDate. Тогда у вас будут только дубликаты, если 2 или более предложений будут сохранены в одни и те же дату и время. Технически возможно, но маловероятно. – PowerUser

+0

Спасибо @PowerUser. Я полагаю, что если бы это считалось слишком резким изменением для текущей базы данных, тогда можно было бы создать дополнительный столбец для хранения времени отдельно, а дата и время могли бы быть вычисленным полем, где это необходимо, в конкретных запросах. (Расчет/добавление может не понадобиться, если время включено в выходной файл и отсортировано DESC вместе с CreationDate.) –