Funciones de agregado: min

Se aplica a:SQL Server

Devuelve de una secuencia de valores atómicos, $arg, el elemento cuyo valor es menor que el de todos los demás.

Sintaxis

  
fn:min($arg as xdt:anyAtomicType*) as xdt:anyAtomicType?  

Argumentos

$arg
Secuencia de elementos de los cuales se devolverá el valor mínimo.

Comentarios

Todos los tipos de valores atomizados que se pasan a min() deben ser subtipos del mismo tipo base. Los tipos base que se aceptan son los tipos que admiten la operación gt . Entre estos tipos se incluyen los tres tipos base numéricos integrados, los tipos base de fecha y hora, xs:string, xs:boolean y xdt:untypedAtomic. Los valores del tipo xdt:untypedAtomic se convierten a xs:double. Si hay una combinación de estos tipos, o si se pasan otros valores de otros tipos, se genera un error estático.

El resultado de min() recibe el tipo base de los tipos pasados, como xs:double en el caso de xdt:untypedAtomic. Si la entrada se encuentra estáticamente vacía, se considera implícitamente vacía y se devuelve un error estático.

La función min() devuelve el único valor de la secuencia que es menor que cualquier otro de la secuencia de entrada. En el caso de los valores xs:string, se utiliza la intercalación de puntos de código Unicode predeterminada. Si un valor xdt:untypedAtomic no se puede convertir a xs:double, el valor se omite en la secuencia de entrada, $arg. Si la entrada es una secuencia vacía calculada dinámicamente, se devolverá la secuencia vacía.

Ejemplos

En este tema se proporcionan ejemplos de XQuery en instancias XML que se almacenan en varias columnas de tipo xml en la base de datos AdventureWorks.

A. Usar la función min() de XQuery para encontrar la ubicación de centro de trabajo con el menor número de horas de trabajo

La consulta siguiente recupera todas las ubicaciones de centro de trabajo del proceso de fabricación de un modelo de producto (ProductModelID=7) con el menor número de horas de trabajo (LaborHours). Por lo general, se devuelve una sola ubicación, tal como se muestra a continuación. Si existen varias ubicaciones con el mismo número mínimo de horas de trabajo, se devolverán todas.

select ProductModelID, Name, Instructions.query('  
  declare namespace AWMI=  
    "https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";  
  for   $Location in /AWMI:root/AWMI:Location  
  where $Location/@LaborHours =  
          min( /AWMI:root/AWMI:Location/@LaborHours )  
return  
  <Location WCID=     "{ $Location/@LocationID }"   
              LaborHrs= "{ $Location/@LaborHours }" />  
  ') as Result   
FROM  Production.ProductModel  
WHERE ProductModelID=7  

Observe lo siguiente en la consulta anterior:

  • La palabra clave namespace del prólogo XQuery define un prefijo de espacio de nombres. A continuación, el prefijo se utiliza en el cuerpo de XQuery.

El cuerpo XQuery construye el XML que tiene un <elemento Location> con atributos WCID y LaborHrs .

  • Esta consulta también recupera los valores de ProductModelID y de nombres.

El resultado es el siguiente:

ProductModelID   Name              Result  
---------------  ----------------  ---------------------------------  
7                HL Touring Frame  <Location WCID="45" LaborHrs="0.5"/>   

Limitaciones de la implementación

Éstas son las limitaciones:

  • La función min() asigna todos los enteros a xs:decimal.

  • No se admite la función min() en valores de tipo xs:duration.

  • No se admiten las secuencias que mezclan tipos en límites de tipo base.

  • No se admite la opción sintáctica que proporciona una intercalación.

Consulte también

Funciones de XQuery con el tipo de datos xml