J'essaie de trouver l'équivalent flocon de neige de generate_series () (la syntaxe PostgreSQL).
SELECT generate_series(timestamp '2017-11-01', CURRENT_DATE, '1 day')
3 Réponses :
C'est ainsi que j'ai pu générer une série de dates dans Snowflake. J'ai défini le nombre de lignes sur 1095 pour obtenir 3 ans de dates, vous pouvez bien sûr changer cela pour ce qui convient à votre cas d'utilisation
select dateadd(day, '-' || seq4(), current_date()) as dte from table (generator(rowcount => 1095))
EDIT: Cette solution n'est pas correcte. seq4
ne garantit pas une séquence sans espaces. Veuillez suivre les autres réponses, pas celle-ci. Merci @Marcin Zukowski pour l'avoir signalé.
Êtes-vous après avoir généré une série de dates? si c'est le cas, sélectionnez current_date () - seq4 () from table (generator (rowcount => 10)) v .. seq4 générera une séquence commençant par 0, rowcount est le nombre de lignes que vous voulez générer .. plus ici docs.snowflake.net/manuals/sql-reference/functions/… < / a>
Attention: cela devrait fonctionner pour les séquences courtes, mais rappelez-vous que SEQ n'est pas garanti pour produire une séquence dense - si vous produisez des millions d'enregistrements, il y aura probablement des trous.
Pour approfondir le commentaire de @ MarcinZukowski, ces lacunes ne sont pas théoriques et dépendent de la taille de votre entrepôt. seq4 ne devrait jamais créer une séquence dense. les autres réponses à cette question évitent ce problème.
J'aurais aimé voir ces commentaires plus tôt, nous avons commencé à voir ces lacunes et avons dû passer par un soutien pour les comprendre. Merci pour vos commentaires - ma solution n'est pas du tout correcte!
Je voulais juste développer le commentaire de Marcin Zukowski pour dire que ces lacunes ont commencé à apparaître presque immédiatement après avoir utilisé une plage de dates générée de cette manière dans un JOIN
.
Nous avons finalement fini par le faire à la place!
select dateadd( day, '-' || row_number() over (order by null), dateadd(day, '+1', current_date()) ) as date from table (generator(rowcount => 90))
Je pense que c'est la meilleure réponse car elle devrait générer les dates sans lacunes pour un grand nombre de lignes.
J'ai eu un problème similaire et j'ai trouvé une approche, qui évite le problème d'un générateur nécessitant une valeur constante en utilisant une variable de session en plus des réponses déjà excellentes ici. C'est à mon avis le plus proche de l'exigence du PO.
-- set parameter to be used as generator "constant" including the start day set num_days = (Select datediff(day, TO_DATE('2017-11-01','YYYY-MM-DD'), current_date()+1)); -- use parameter in bcrowell's answer now select dateadd( day, '-' || row_number() over (order by null), dateadd(day, '+1', current_date()) ) as date from table (generator(rowcount => ($num_days))); -- clean up previously set variable unset num_days;
Snowflake prend-il en charge les expressions de table communes récursives?