Тази статия обяснява как да използвате заявки с най-високи стойности и заявки с общи суми, за да намерите най-новите или най-ранните дати в набор от записи. Това може да ви помогне да отговорите на редица бизнес въпроси, като например кога клиент е направил последно поръчка или кои пет тримесечия са били най-добри за продажбите по градове.
В тази статия
Общ преглед
Можете да класирате данни и да преглеждате най-високо класираните елементи, като използвате заявка с най-високи стойности. Заявката с най-висока стойност е заявка за избиране, която връща зададен брой или процент от стойности от горния край на резултатите, например петте най-популярни страници в уеб сайт. Можете да използвате заявка с най-високи стойности спрямо всякакъв вид стойности – те не трябва да са числа.
Ако искате да групирате или обобщавате данните си, преди да ги класирате, не е необходимо да използвате заявка с най-високи стойности. Нека например да трябва да намерите номерата на продажбите за дадена дата за всеки град, в който работи вашата фирма. В този случай градовете стават категории (трябва да намерите данните по град), така че да използвате заявка за общи суми.
Когато използвате заявка с най-високи стойности, за да намерите записи, които съдържат най-новите или най-ранните дати в таблица или група записи, можете да отговаряте на редица бизнес въпроси, като например следните:
-
Кой напоследък прави най-много продажби?
-
Кога последно е направил клиент поръчка?
-
Кога са следващите три рождени дни в екипа?
За да направите заявка с най-висока стойност, започнете със създаване на заявка за избиране. След това сортирайте данните според въпроса си – независимо дали търсите най-отгоре, или отдолу. Ако трябва да групирате или обобщите данните, превърнете заявката за избиране в заявка за общи суми. След това можете да използвате агрегатна функция, като например Max или Min , за да се върне най-високата или най-ниската стойност, или First или Last , за да се върне най-ранната или най-късната дата.
В тази статия се предполага, че стойностите за дата, които използвате, имат данни от тип "Дата/час". Ако вашите стойности за дата са в текстово поле, .
Помислете за използване на филтър вместо заявка за най-високи стойности
Филтърът обикновено е по-добър, ако имате предвид определена дата. За да определите дали трябва да създадете заявка за най-високи стойности, или да приложите филтър, имайте предвид следното:
-
Ако искате да върнете всички записи, за които датата съвпада, е преди или по-късна от определена дата, използвайте филтър. Например за да видите датите за продажби между април и юли, прилагате филтър.
-
Ако искате да върнете зададено количество записи, които имат най-новите или най-новите дати в поле, и не знаете точните стойности за дата или те нямат значение, можете да създадете заявка с най-високи стойности. Например за да видите петте най-добри тримесечия за продажби, използвайте заявка с най-високи стойности.
За повече информация относно създаването и използването на филтри вж. статията Прилагане на филтър за преглед на избрани записи в база данни на Access.
Подгответе примерните данни, които да следвате, заедно с примерите
Стъпките в тази статия използват данните в примерните таблици по-долу.
Таблицата "Служители"
|
ФамилноИме |
Собствено име |
Адрес |
Град |
CountryOrr egion |
Дата на раждане |
Дата на наемане |
|
Белишки |
Костадин |
ул. "Хемус" 16 |
Велико Търново |
USA |
05 февруари 1968 г. |
10 юни 1994 г. |
|
Heloo |
Уелс |
ул. "Освобождение" 6 |
Велинград |
USA |
22 май 1957 г. |
22 ноември 1996 г. |
|
Христозова |
Гуидо |
ул. "Захари Стоянов" 22 |
Брацигово |
USA |
11 ноември 1960 г. |
11 март 2000 г. |
|
Кравай |
Жан Филип |
ул "Марица" 77 |
Вършец |
UK |
22 март 1964 г. |
22 юни 1998 г. |
|
Цена |
Юлиански |
ул. "Хан Аспарух" 81 |
Видин |
Мексико |
05 юни 1972 г. |
05 януари 2002 г. |
|
Хюз |
Кристин |
Св. С. 3122 75 С. |
Сиатъл |
USA |
23 януари 1970 г. |
23 април 1999 г. |
|
Рангелов |
Богомил |
ул. "Победа" 12 |
Кричим |
USA |
14 април 1964 г. |
14 октомври 2004 г. |
|
Birkby |
Иванова |
2 носа pkwy |
Портланд |
USA |
29 октомври 1959 г. |
29 март 1997 г. |
Таблицата EventType
|
ИД на тип |
Тип събитие |
|
1 |
Стартиране на продукт |
|
2 |
Корпоративна функция |
|
3 |
Частна функция |
|
4 |
Набиране на средства |
|
5 |
Търговско изложение |
|
6 |
Лекция |
|
7 |
Концерт |
|
8 |
Изложба |
|
9 |
Уличен панаир |
Таблицата Customers
|
ИД_клиент |
Фирма |
Контакт |
|
1 |
Contoso, Ltd. Графичен |
Джонатан Аас |
|
2 |
Tailspin Toys |
Елън Адамс |
|
3 |
Fabrikam |
Керъл Филипс |
|
4 |
Играчки с wingtip |
Lucio Iallo |
|
5 |
A. Датум |
Мандар Самант |
|
6 |
Adventure Works |
Брайън Бърк |
|
7 |
Институт за проектиране |
Jaka Stele |
|
8 |
Училище за изящни изкуства |
Милена Дуоманова |
Таблицата ''Събития''
|
ИД на събитие |
Тип събитие |
Клиент |
Дата на събитието |
Цена |
|
1 |
Стартиране на продукт |
Contoso, Ltd. |
4/14/2011 |
10 000 лв. |
|
2 |
Корпоративна функция |
Tailspin Toys |
4/21/2011 |
8000 лв. |
|
3 |
Търговско изложение |
Tailspin Toys |
1.05.2011 |
25 000 лв. |
|
4 |
Изложба |
Graphic Design Institute |
5/13/2011 |
4500 лв. |
|
5 |
Търговско изложение |
Contoso, Ltd. |
5/14/2011 |
55 000 лв. |
|
6 |
Концерт |
Училище за изящни изкуства |
5/23/2011 |
12 000 лв. |
|
7 |
Стартиране на продукт |
A. Датум |
6/1/2011 |
15 000 лв. |
|
8 |
Стартиране на продукт |
Играчки с wingtip |
6/18/2011 |
21 000 лв. |
|
9 |
Набиране на средства |
Adventure Works |
6/22/2011 |
1300 лв. |
|
10 |
Лекция |
Graphic Design Institute |
6/25/2011 |
2450 лв. |
|
11 |
Лекция |
Contoso, Ltd. |
4.07.2011 |
3800 лв. |
|
12 |
Уличен панаир |
Graphic Design Institute |
4.07.2011 |
5 500 лв. |
Забележка: Стъпките в този раздел предполагат, че таблиците Customers и Event Type се намират от страната "един" на релации "един към много" с таблицата Events. В този случай таблицата Events споделя полетата CustomerID и TypeID. Заявките за общи суми, описани в следващите раздели, няма да работят без тези релации.
Поставяне на примерните данни в работни листове на Excel
-
Стартирайте Excel. Отваря се празна работна книга.
-
Натиснете SHIFT+F11, за да вмъкнете работен лист (ще ви трябват четири).
-
Копирайте данните от всяка примерна таблица в празен работен лист. Включете заглавията на колоните (първия ред).
Създаване на таблици на база данни от работните листове
-
Изберете данните от първия работен лист, включително заглавията на колоните.
-
Щракнете с десния бутон върху навигационния екран и след това щракнете върху Постави.
-
Щракнете върху Да , за да потвърдите, че първият ред съдържа заглавия на колони.
-
Повторете стъпки от 1 до 3 за всеки от останалите работни листове.
Намиране на най-новата или най-новата дата
Стъпките в този раздел използват примерните данни, за да илюстрират процеса на създаване на заявка за най-високи стойности.
Създаване на заявка с основни най-високи стойности
-
В раздела Създаване, в групата Заявки щракнете върху Проектиране на заявка.
-
Щракнете двукратно върху таблицата "Служители" и след това щракнете върху Затвори.
Ако използвате примерните данни, добавете таблицата Employees към заявката.
-
Добавете полетата, които искате да използвате във вашата заявка, към мрежата за проектиране. Можете да щракнете двукратно върху всяко поле или да плъзнете и пуснете всяко поле в празна клетка в реда Поле .
Ако използвате примерната таблица, добавете полетата Собствено име, Фамилно име и Дата на раждане.
-
В полето, съдържащо вашите най-високи или най-ниски стойности (полето "Дата на раждане", ако използвате примерната таблица), щракнете върху реда Сортиране и изберете Възходящо или Низходящо.
Низходящ ред на сортиране връща последната дата, а възходящ ред на сортиране връща най-ранната дата.
Важно: Трябва да зададете стойност в реда Сортиране само за полетата, които съдържат вашите дати. Ако зададете ред на сортиране за друго поле, заявката не връща желаните резултати.
-
В раздела Проектиране , в групата Инструменти щракнете върху стрелката надолу до Всички (списък Най-високи стойности ) и или въведете броя на записите, които искате да видите, или изберете опция от списъка.
-
Щракнете върху Изпълни
, за да изпълните заявката и да покажете резултатите в изглед на лист с данни. -
Запишете заявката като NextBirthDays.
Можете да видите, че този тип заявка с най-високи стойности може да отговаря на основни въпроси, като например кой е най-старият или най-младият човек във фирмата. Следващите стъпки обясняват как да използвате изрази и други критерии, за да добавите сила и гъвкавост към заявката. Критериите, показани в следващата стъпка, връщат следващите три рождени дни на служителя.
Добавяне на критерии към заявката
Тези стъпки използват заявката, създадена в предишната процедура. Можете да продължите със заявка с различни най-високи стойности, стига тя да съдържа действителни данни за дата/час, а не текстови стойности.
Съвет: Ако искате да разберете по-добре как работи тази заявка, превключвайте между изглед за проектиране и изглед на лист с данни на всяка стъпка. Ако искате да видите действителния код на заявката, превключете на SQL изглед. За да превключвате между изгледите, щракнете с десния бутон върху раздела в горния край на заявката и след това щракнете върху желания изглед.
-
В навигационния екран щракнете с десния бутон върху заявката NextBirthDays и след това щракнете върху Режим на проектиране.
-
В мрежата на заявката за проектиране, в колоната отдясно на BirthDate въведете следното:MonthBorn: DatePart("m",[BirthDate]).Този израз извлича месеца от BirthDate с помощта на функцията DatePart .
-
В следващата колона на мрежата за проектиране на заявки въведете следното:DayOfMonthBorn: DatePart("d",[BirthDate])Този израз извлича деня от месеца от BirthDate с помощта на функцията DatePart.
-
Изчистете квадратчетата за отметка в реда Покажи за всеки от двата израза, които току-що въведохте.
-
Щракнете върху реда Сортиране за всеки израз и след това изберете Възходящо.
-
В реда Критерии на колоната Дата на раждане въведете следния израз:Month([Birth Date]) > Month(Date()) OR Month([Birth Date])= Month(Date()) AND Day([Birth Date])>Day(Date())Този израз прави следното:
-
Month( [Birth Date]) > Month(Date()) указва, че датата на раждане на всеки служител попада в бъдещ месец.
-
The Month( [Birth Date])= Month(Date()) And Day([Birth Date])>Day(Date()) указва, че ако датата на раждане е в текущия месец, рожденният ден попада на или след текущия ден.
Накратко, този израз изключва всички записи, където рожденният ден възниква между 1 януари и текущата дата.
Съвет: За повече примери на изрази за критерии за заявки вж. статията Примери на критерии за заявки.
-
-
В раздела Проектиране , в групата Настройка на заявката въведете 3 в полето Връщане .
-
В раздела Структура, в групата Резултати щракнете върху Изпълни
.
Забележка: В собствената си заявка, като използвате собствени данни, понякога може да видите повече записи, отколкото сте указали. Ако вашите данни съдържат множество записи, които споделят стойност, която е между най-високите стойности, вашата заявка ще върне всички тези записи, дори ако това означава връщане на повече записи, отколкото искате.
Намиране на най-новите или най-новите дати за групи от записи
Можете да използвате заявка за общи суми, за да намерите най-ранните или последните дати за записите, които попадат в групи, например събития, групирани по град. Заявката за общи суми е заявка за избиране, която използва агрегатни функции (например Group By, Min, Max, Count, First и Last), за да изчисли стойности за всяко изходно поле.
Включете полето, което искате да използвате за категории – за групиране по – и полето със стойностите, които искате да обобщите. Ако включите други изходни полета – например имената на клиентите, когато групирате по тип събитие – заявката ще използва тези полета и за създаване на групи, променяйки резултатите, така че да не отговарят на първоначалния ви въпрос. За да наимените редовете с помощта на други полета, трябва да създадете допълнителна заявка, която използва заявката за общи суми като източник, и да добавите допълнителните полета към тази заявка.
Съвет: Създаването на заявки в стъпки е много ефективна стратегия за отговаряне на по-разширени въпроси. Ако имате проблеми с работата на сложна заявка, помислете дали можете да я разделите на поредица от по-прости заявки.
Създаване на заявка за обобщаване
Тази процедура използва примерната таблица Events и примерната таблица EventType , за да отговори на този въпрос:
Кога беше последното събитие от всеки тип събитие, с изключение на концертите?
-
В раздела Създаване, в групата Заявки щракнете върху Проектиране на заявка.
-
Щракнете двукратно върху таблиците Events и EventType. Всяка таблица се появява в горната секция на конструктора на заявки.
-
Щракнете двукратно върху полето EventType на таблицата EventType и полето EventDate от таблицата Events, за да добавите полетата към мрежата за проектиране на заявки.
-
В мрежата на заявката за проектиране, в реда Критерии на полето EventType въведете <>Concert.
Съвет: За повече примери на изрази за критерии вж. статията Примери на критерии за заявки.
-
В раздела Структура, в групата Покажи/скрий щракнете върху Общи суми.
-
В мрежата на заявката за проектиране щракнете върху сумарния ред на полето EventDate и след това щракнете върху Макс.
-
В раздела Структура, в групата Резултати щракнете върху Изглед и след това щракнете върху SQL изглед.
-
В прозореца на SQL, в края на клаузата SELECT, точно след ключовата дума AS, заместете MaxOfEventDate с MostRecent.
-
Запишете заявката като MostRecentEventByType.
Създаване на втора заявка за добавяне на още данни
Тази процедура използва заявка mostRecentEventByType от предходната процедура, за да отговори на този въпрос:
Кой е клиентът на най-новото събитие от всеки тип събитие?
-
В раздела Създаване, в групата Заявки щракнете върху Проектиране на заявка.
-
В раздела Заявки щракнете двукратно върху заявката MostRecentEventByType.
-
В раздела Таблици щракнете двукратно върху таблицата "Събития" и таблицата "Клиенти".
-
В конструктора на заявки щракнете двукратно върху следните полета:
-
В таблицата Events щракнете двукратно върху EventType.
-
В заявката MostRecentEventByType щракнете двукратно върху MostRecent.
-
В таблицата "Клиенти" щракнете двукратно върху Фирма.
-
-
В мрежата на заявката за проектиране, в реда Сортиране на колоната EventType изберете Възходящо.
-
В раздела Проектиране, в групата Резултати щракнете върху Изпълни.