Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SQL.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
327.17 Кб
Скачать

Функции 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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]