- •Выборка данных
- •Оператор select
- •Выражения sql
- •Выражение from
- •Операции left join, right join
- •Операция inner join
- •Выражение in
- •Предикаты all, distinct, distinctrow, top
- •Объявление with owneraccess option
- •Выражение where
- •Операция Like
- •Операция In
- •Операция Between...And
- •Подзапрос
- •Выражение order by
- •Выражение group by
- •Выражение having
- •Оператор union
- •Оператор transform
- •Выражение procedure
- •Объявление parameters
- •Изменение данных
- •Оператор update
- •Оператор insert into
- •Оператор delete
- •Изменение структуры
- •Оператор select...Into
- •Оператор create table3
- •Выражение constraint4
- •Оператор alter table5
- •Оператор create index6
- •Оператор drop7
- •Агрегатные функции
- •Функция Count
- •Функция Avg
- •Функция Sum
- •Функции Var и VarP
- •Функции StDev и StDevP
- •Функции Min, Max
- •Функции First, Last
Функции Min, Max
Возвращают максимальное или минимальное значение указанного поля. Формат
Min(expr)
Max(expr)
Аргумент expr – строка – имя поля или выражение, содержащее имя поля. Может содержать константы и имя функции (встроенной или определенной пользователем, но не агрегатной функции SQL).
Функции Min и Max определяют наименьшее и наибольшее значение выборки или группы. Если выборка не определена, просматривается вся таблица. Можно использовать в свойстве SQL объекта QueryDef или при создании объекта Recordset, основанного на SQL запросе.
В Microsoft Access функции Min и Max можно использовать в построителе запросов и операторе SQL, в т.ч. формируемом программно, а также в вычисляемых управляющих элементах форм и отчетов. В построителе запросов она вызывается кнопкой Totals на панели Query Design. Особенно полезны в перекрестных и итоговых запросах.
Пусть имеется таблица Orders с полями Freight и ShipCity, на основе которой создается запрос, выводящий минимальную стоимость доставки заказов, отправленных в каждый город. Создадим новый запрос, «перетащим» поле ShipCity в ячейку конструктора, в ячейку Total под ShipCity введем Group By. «Перетащим» Freight в следующую ячейку конструктора, ячейку Total установим в Min. Запрос покажет минимальную стоимость доставки для каждого города. Его текст можно посмотреть в режиме SQL-просмотра:
SELECT ShipCity, Min(Freight) AS MinOfFreight FROM Orders GROUP BY ShipCity;
То же можно сделать в коде VB. Следующая процедура создает динамический объект Recordset
Sub MinFreight()
Dim dbs As Database, rst As Recordset, strSQL As String
Set dbs = CurrentDb
strSQL = "SELECT ShipCity, Min(Freight) AS MinOfFreight " _ & "FROM Orders GROUP BY ShipCity;"
Set rst = dbs.OpenRecordset(strSQL)
rst.MoveLast
Debug.Print rst.RecordCount
Set dbs = Nothing
End Sub
Для вывода результата в «вычисляемом» управляюшем элементе, например, текстовом поле, нужно присвоить его свойству ControlSource значение = Min([Freight]). Число учитываемых записей можно ограничить в свойстве Filter формы.
В следующем примере вычисляется минимальное и максимальное значение стоимости доставки в United Kingdom:
SELECT Min([Freight]) AS [LowFreight] FROM Orders WHERE [ShipCountry] = 'UK';
SELECT Max([Freight]) AS [HighFreight] FROM Orders WHERE [ShipCountry] = 'UK';
Тот же результат получается в вычисляемом управляющем элементе, если установить его свойство ControlSource =Min([Freight]), а свойство Filter формы устанавливается [ShipCountry] = 'UK'.
Функции First, Last
Возвращают значение поля из первой или последней записи набора, возвращаемого запросом. Формат
First(expr)
Last(expr)
Аргумент expr – строка – имя поля, содержащего подсчитываемые данные, или выражение, содержащее имя поля. Может содержать имя функции (встроенной или определенной пользователем, но не агрегатной функции SQL).
Функции First и Last аналогичны методам MoveFirst и MoveLast объекта DAO Recordset. Они возвращают значение указанного поля из первой или последней записи запроса соответственно., Значения могут быть произвольными, поскольку порядок записей набора не определен, если только не используется выражение ORDER BY.
В Microsoft Access функции First и Last можно использовать в построителе запросов и операторе SQL, в т.ч. формируемом программно, а также в вычисляемых управляющих элементах форм и отчетов. В построителе запросов она вызывается кнопкой Totals на панели Query Design. Особенно полезны в перекрестных и итоговых запросах.
Пусть, например, имеется отчет Order, сгруппированный по полю ShipCountry и упорядоченный по полю OrderDate. Можно использовать First и Last в управляющих элементах для вывода первой и последней даты заказа для каждой группы. Группировка по ShipCountry производится кнопкой Sorting And Grouping панели Report Design – нужно выбрать ShipCountry в колонке Field/Expression и установить GroupHeader и GroupFooter в Yes. В «подвале» ShipCountry нужно создать два текстовых поля и установить их свойства ControlSource в =First([OrderDate]) и =Last([OrderDate]) соответственно. Значения видны в режиме предварительного просмотра.
См. также TopValues.
LastName для первой и последней записи таблицы Employees (вызывается процедура EnumFields из примера к FROM):
Sub FirstLastX1()
Dim dbs As Database, rst As Recordset
' Modify this line to include the path to Northwind on your computer.
Set dbs = OpenDatabase("Northwind.mdb")
' Return the values from the LastName field of the first and last
' records returned from the table.
Set rst = dbs.OpenRecordset("SELECT First(LastName) as First, " _ & "Last(LastName) as Last FROM Employees;")
rst.MoveLast ' Populate the Recordset
' Call EnumFields to print the contents of the Recordset.
' Pass the Recordset object and desired field width.
EnumFields rst, 12
dbs.Close
End Sub
Сравнение First и Last с Min и Max при поиске самого раннего и позднего дней рождений
Sub FirstLastX2()
Dim dbs As Database, rst As Recordset
' Modify this line to include the path to Northwind on your computer.
Set dbs = OpenDatabase("Northwind.mdb")
' Find the earliest and latest birth dates of Employees.
Set rst = dbs.OpenRecordset("SELECT First(BirthDate) as FirstBD, " _ & "Last(BirthDate) as LastBD FROM Employees;")
rst.MoveLast ' Populate the Recordset
' Call EnumFields to print the contents of the Recordset.
' Pass the Recordset object and desired field width.
EnumFields rst, 12
Debug.Print
' Find the earliest and latest birth dates of Employees.
Set rst = dbs.OpenRecordset("SELECT Min(BirthDate) as MinBD," _ & "Max(BirthDate) as MaxBD FROM Employees;")
rst.MoveLast ' Populate the Recordset
' Call EnumFields to print the contents of the Recordset.
' Pass the Recordset object and desired field width.
EnumFields rst, 12
dbs.Close
End Sub
1 2 байта
2 Только в запросах к связанным таблицам с соотв. полями.
3 Microsoft Jet не поддерживает CREATE TABLE и другие операторы определения данных (data definition language) для не Microsoft Jet баз. Нужно использовать метод DAO Create.
4 Microsoft Jet не поддерживает CONSTRAINT и другие операторы определения данных (data definition language) для не Microsoft Jet баз. Нужно использовать метод DAO Create.
5 Microsoft Jet не поддерживает ALTER TABLE и другие операторы определения данных (data definition language) для не Microsoft Jet баз. Нужно использовать метод DAO Create.
6 Microsoft Jet не поддерживает CREATE INDEX и другие операторы определения данных (data definition language) для не Microsoft Jet баз. Нужно использовать метод DAO Create.
7 Microsoft Jet не поддерживает DROP и другие операторы определения данных (data definition language) для не Microsoft Jet баз. Нужно использовать метод DAO Delete.
