MIN is an aggregate expression that evaluates the minimum of an expression over a set of rows (see Aggregates (set functions)). MIN is allowed only on expressions that evaluate to built-in data types (including CHAR, VARCHAR, DATE, TIME, etc.).

MIN ( [ DISTINCT | ALL ]Expression)

The
DISTINCT and ALL qualifiers eliminate or retain duplicates, but these qualifiers
have no effect in a MIN expression. Only one DISTINCT aggregate expression
per *SelectExpression* is
allowed. For example, the following query is not allowed:

SELECT COUNT (DISTINCT flying_time), MIN (DISTINCT miles) FROM Flights

The expression can contain multiple column
references or expressions, but it cannot contain another aggregate or subquery.
It must evaluate to a built-in data type. You can therefore call methods that
evaluate to built-in data types. (For example, a method that returns a *java.lang.Integer* or *int* evaluates
to an INTEGER.) If an expression evaluates to NULL, the aggregate skips that
value.

The type's comparison rules determine the maximum value. For CHAR, VARCHAR, and LONG VARCHAR, the number of blank spaces at the end of the value can affect the result.

The resulting data type is the same as the expression on which it operates (it will never overflow).

-- NOT valid: SELECT DISTINCT flying_time, MIN(DISTINCT miles) from Flights -- valid: SELECT COUNT(DISTINCT flying_time), MIN(DISTINCT miles) from Flights -- find the earliest date: SELECT MIN (flight_date) FROM FlightAvailability;