2017-09-12 1 views
1

Tout en recherchant un problème précédent de la mienne, j'ai utilisé la réponse à this post. Ma requête ressemble à ceci:Teradata partition par col ordre par 0

sel 
    * 
from (
    sel distinct 
     COL, 
     FIELD 
    from TBL 

    where COL in (
     -- subquery 
    ) 
     and FIELD is not NULL 
) q 
qualify row_number() over (partition by COL order by 0) between 1 and 750 
; 

Il fait ce que je veux qu'il fasse, mais je ne le comprends pas complètement. Le problème est dans le bit partition by COL order by 0. Je comprends que partition by divise les données en sous-groupes basés sur les valeurs dans le champ désigné et je comprends que order by, lorsqu'il est suivi par un nom de champ va trier les résultats de chaque partition par ce champ, mais je ne comprends pas comment il fonctionne avec un nombre entier. Mon hypothèse est que mettre une constante à cet endroit produira les mêmes résultats. Cette hypothèse est-elle correcte? Est-ce que 0 a une signification spéciale ici?

+0

Il s'agit simplement d'une valeur fictive donnée pour trier les enregistrements dans l'ordre naturel dans lequel ils sont récupérés et attribuer la valeur du numéro de ligne en conséquence. –

+0

Ne comprenez-vous pas le résultat de la commande par une constante, ou ce qui se passe réellement dans l'implémentation, ex. comment les cravates sont brisées? –

+0

Je ne comprends pas le résultat de la commande par une constante et je ne suis pas sûr de savoir de quels liens vous parlez. –

Répondre

1

Vos hypothèses sont correctes. Vous pourriez y mettre n'importe quelle valeur et vous obtiendriez les mêmes résultats.

La clause ORDER BY de la partie OVER() de la fonction de fenêtre est requise lors de l'utilisation de ROW_NUMBER().

une constante Sticking il revient à dire: « Je ne me soucie pas de dossiers pour lesquels vous gardez COL, juste garder 750 d'entre eux »

Comme @dnoeth a souligné, parce que vous commandez par une constante et En raison de la nature parallèle de Teradata et de la manière dont cela affecte la récupération de données sur les systèmes parallèles (et la nature du SGBDR en général), il n'y a aucune garantie que vous obteniez le même résultat entre deux analyses.