FIRST_ fonction VALUE de fenêtre - Amazon Redshift

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

FIRST_ fonction VALUE de fenêtre

À partir d'un ensemble ordonné de lignes, FIRST _ VALUE renvoie la valeur de l'expression spécifiée par rapport à la première ligne du cadre de fenêtre.

Pour savoir comment sélectionner la dernière ligne du cadre, consultez LAST_ fonction VALUE de fenêtre.

Syntaxe

FIRST_VALUE( expression )[ IGNORE NULLS | RESPECT NULLS ] OVER ( [ PARTITION BY expr_list ] [ ORDER BY order_list frame_clause ] )

Arguments

expression

Colonne cible ou expression sur laquelle la fonction opère.

IGNORE NULLS

Lorsque cette option est utilisée avec FIRST _VALUE, la fonction renvoie la première valeur du cadre qui ne l'est pas NULL (ou NULL si toutes les valeurs le sontNULL).

RESPECT NULLS

Indique qu’Amazon Redshift doit contenir des valeurs null pour déterminer la ligne à utiliser. RESPECTNULLSest pris en charge par défaut si vous ne le spécifiez pas IGNORENULLS.

OVER

Présente les clauses de fenêtrage de la fonction.

PARTITIONPAR expr_list

Définit la fenêtre de la fonction en termes d’une ou de plusieurs expressions.

ORDERPAR order_list

Trie les lignes dans chaque partition. Si aucune clause PARTITION BY n'est spécifiée, ORDER BY trie la table entière. Si vous spécifiez une clause ORDER BY, vous devez également spécifier une frame_clause.

Les résultats de la VALUE fonction FIRST _ dépendent de l'ordre des données. Les résultats sont non déterministes dans les cas suivants :

  • Lorsqu'aucune clause ORDER BY n'est spécifiée et qu'une partition contient deux valeurs différentes pour une expression

  • Lorsque l'expression est évaluée à différentes valeurs correspondant à la même valeur dans la liste ORDER BY.

frame_clause

Si une clause ORDER BY est utilisée pour une fonction d'agrégation, une clause de cadre explicite est requise. La clause de cadre affine l’ensemble de lignes dans la fenêtre d’une fonction, en incluant ou en excluant des ensembles de lignes du résultat ordonné. La clause frame comprend le ROWS mot-clé et les spécificateurs associés. Consultez Récapitulatif de la syntaxe de la fonction de fenêtrage.

Type de retour

Ces fonctions prennent en charge les expressions qui utilisent les types de données primitifs d’Amazon Redshift. Le type de retour est identique au type de données de l’expression.

Exemples

Les exemples suivants utilisent le VENUE tableau des exemples de TICKIT données. Pour de plus amples informations, veuillez consulter Exemple de base de données.

L'exemple suivant renvoie le nombre de places assises pour chaque salle du VENUE tableau, avec les résultats classés par capacité (du plus haut au plus faible). La VALUE fonction FIRST _ permet de sélectionner le nom de la salle correspondant à la première ligne du cadre : dans ce cas, la rangée avec le plus grand nombre de places. Les résultats sont partitionnés par état. Ainsi, lorsque la VENUESTATE valeur change, une nouvelle première valeur est sélectionnée. Le cadre de fenêtrage est illimité. La même première valeur est donc sélectionnée pour chaque ligne de chaque partition.

Pour la Californie, Qualcomm Stadium possède le plus grand nombre de places (70561), ce nom est donc la première valeur de toutes les lignes dans la partition CA.

select venuestate, venueseats, venuename, first_value(venuename) over(partition by venuestate order by venueseats desc rows between unbounded preceding and unbounded following) from (select * from venue where venueseats >0) order by venuestate; venuestate | venueseats | venuename | first_value -----------+------------+--------------------------------+------------------------------ CA | 70561 | Qualcomm Stadium | Qualcomm Stadium CA | 69843 | Monster Park | Qualcomm Stadium CA | 63026 | McAfee Coliseum | Qualcomm Stadium CA | 56000 | Dodger Stadium | Qualcomm Stadium CA | 45050 | Angel Stadium of Anaheim | Qualcomm Stadium CA | 42445 | PETCO Park | Qualcomm Stadium CA | 41503 | AT&T Park | Qualcomm Stadium CA | 22000 | Shoreline Amphitheatre | Qualcomm Stadium CO | 76125 | INVESCO Field | INVESCO Field CO | 50445 | Coors Field | INVESCO Field DC | 41888 | Nationals Park | Nationals Park FL | 74916 | Dolphin Stadium | Dolphin Stadium FL | 73800 | Jacksonville Municipal Stadium | Dolphin Stadium FL | 65647 | Raymond James Stadium | Dolphin Stadium FL | 36048 | Tropicana Field | Dolphin Stadium ...

L'exemple suivant montre l'utilisation de l'IGNORENULLSoption et repose sur l'ajout d'une nouvelle ligne au VENUE tableau :

insert into venue values(2000,null,'Stanford','CA',90000);

Cette nouvelle ligne contient une NULL valeur pour la VENUENAME colonne. Répétez maintenant la VALUE requête FIRST _ qui a été affichée plus haut dans cette section :

select venuestate, venueseats, venuename, first_value(venuename) over(partition by venuestate order by venueseats desc rows between unbounded preceding and unbounded following) from (select * from venue where venueseats >0) order by venuestate; venuestate | venueseats | venuename | first_value -----------+------------+----------------------------+------------- CA | 90000 | NULL | NULL CA | 70561 | Qualcomm Stadium | NULL CA | 69843 | Monster Park | NULL ...

Comme la nouvelle ligne contient la VENUESEATS valeur la plus élevée (90000) et que c'VENUENAMEest le casNULL, la VALUE fonction FIRST _ revient NULL pour la CA partition. Pour ignorer de telles lignes dans l'évaluation de la fonction, ajoutez l'IGNORENULLSoption à l'argument de la fonction :

select venuestate, venueseats, venuename, first_value(venuename) ignore nulls over(partition by venuestate order by venueseats desc rows between unbounded preceding and unbounded following) from (select * from venue where venuestate='CA') order by venuestate; venuestate | venueseats | venuename | first_value ------------+------------+----------------------------+------------------ CA | 90000 | NULL | Qualcomm Stadium CA | 70561 | Qualcomm Stadium | Qualcomm Stadium CA | 69843 | Monster Park | Qualcomm Stadium ...