Quelle est la différence entre le TRONC et TO_DATE dans la Ruche
Salut, j'ai essayer de trouver quelle est la différence entre l'utilisation d'un TRONC et TO_DATE est dans la Ruche.
Actuellement au sein de l'oracle, j'ai écrit l'instruction du cas suivant contre les Données indiquées ci-dessous:
ORDER_NO | NAME | DATE_ | TASK_NO
ABC123 | Humpty | 07-OCT-16 12:30:54 | 1
ABC123 | Humpty | 07-OCT-16 12:30:54 | 2
ABC123 | Humpty | 07-OCT-16 12:32:20 | 6
SELECT ORDER_NO, NAME, DATE_, TASK_NO
(CASE WHEN DATE_ - LAG(DATE_) OVER (PARTITION BY ORDER_NO, NAME, TRUNC(DATE_) ORDER BY DATE_) <= 1/48
THEN 0 ELSE 1 END) AS COUNT1
et cela me donne le résultat:
ORDER_NO | NAME | DATE_ | TASK_NO | COUNT1
ABC123 | Humpty | 07-OCT-16 12:30:54 | 1 | 1
ABC123 | Humpty | 07-OCT-16 12:30:54 | 2 | 0
ABC123 | Humpty | 07-OCT-16 12:32:20 | 6 | 1
ce qui est correct. Maintenant, si j'utilise la même requête dans la Ruche contre mon ensemble de données complet, je reçois un message d'erreur:
Error while compiling statement: FAILED: SemanticException Failed to breakup Windowing invocations into Groups. At least 1 group must only depend on input columns.
J'ai donc changé le TRONC de TO_DATE et ce qui fonctionne et me donne les résultats suivants:
SELECT ORDER_NO, NAME, DATE_, TASK_NO
(CASE WHEN DATE_ - LAG(DATE_) OVER (PARTITION BY ORDER_NO, NAME, TO_DATE(DATE_) ORDER BY DATE_) <= 1/48
THEN 0 ELSE 1 END) AS COUNT1
et cela me donne le résultat:
ORDER_NO | NAME | DATE_ | TASK_NO | COUNT1
ABC123 | Humpty | 07-OCT-16 12:30:54 | 1 | 1
ABC123 | Humpty | 07-OCT-16 12:32:20 | 6 | 1
ABC123 | Humpty | 07-OCT-16 12:30:54 | 2 | 1
qui est différent de ce que je reçois dans Oracle. De ce que je peux recueillir la date de valeur est stockée comme une chaîne de caractères comme les résultats ne sont pas commandés par Date/Heure et c'est là que réside le problème, mais ne savez pas quels sont les changements que je dois faire pour le réparer.
Voudrais vraiment l'apprécier quelques conseils.
CODE MIS À JOUR:
SELECT
ORDER_NO
,NAME
,DATE_FIXED
,TASK_NO
,CASE WHEN DATE_UTS - LAG(DATE_UTS) OVER (PARTITION BY ORDER_NO, NAME, TO_DATE(DATE_FIXED) ORDER BY DATE_FIXED) <= 60*30
THEN 0
ELSE 1
END AS COUNT1
FROM
(
SELECT
ORDER_NO
,NAME
,TASK_NO
,FROM_UNIXTIME(UNIX_TIMESTAMP(DATE_, 'DD-MMM-YY HH:MM:SS')) AS DATE_FIXED
,UNIX_TIMESTAMP(DATE_, 'DD-MMM-YY HH:MM:SS') AS DATE_UTS
FROM TABLE1
) T
DATE_
?Grâce Kacper, le DATE_ dans oracle est vers le bas comme un Type de données de Date.
Qu'est-ce que le DATE_ est de type Ruche?
Le DATE_ type de Ruche est en bas, comme une chaîne de caractères.
OriginalL'auteur mowen10 | 2016-12-22
Vous devez vous connecter pour publier un commentaire.
1
La ruche des Opérateurs et des Fonctions Définies par l'Utilisateur (Udf)
2
Vous avez des erreurs dans la requête initiale
TASK_NO
et(CASE WHEN
Trunc
dans la Ruche doit prendre 1 paramètre, et il n'y a pas de paramètre pour la journée.3
Le seul à reconnaître le format de date dans la Ruche est AAAA-MM-JJ qui ne correspond pas à vos données.
En appliquant les fonctions de date sur la chaîne non valide résultat NULL.
Ceci est la façon de convertir votre format de données pour les dates:
et la totalité de la requête:
Ce furent également les résultats quand je l'ai testé sur Oracle
Merci Dudu va faire, qu'est-ce que la solution de contournement à une date?
Je suis juste vérifier quelque chose pour vous
Merci Dudu pour souligner les enjeux. Toutes mes excuses à la virgule a été oublié quand j'étais en tapant la question, mais est-on dans la requête. En ce qui concerne votre requête va essayer que maintenant, avait une question tho, serait de l'ordre par pas besoin d'un tronc autrement cela l'habitude de commander à droite?
J'ai couru le code et cela me donne les résultats dans l'ordre de date pour le moment mais le count1 résultats ne sont toujours pas droit, comme tous les montrant comme 1.. Merci btw pour votre aide, vraiment apprécier votre temps. Juste de voir votre commentaire sur l'reconnu le format de date...
OriginalL'auteur David דודו Markovitz