|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : avril 2007 Messages : 11 ![]() |
Bonjour à tous,
J'utilise Oracle 10 sous unix (solaris) en production. Je dois écrire une requete qui me rendra un certains chiffre, mais je dois l'adapter aux exigences d'unix. cela fait 3 jours que je me bat mais sans succes contre cette requete, et j'ai la pression de mes chefs. En fait, c'est lorsqu'il faut faire la difference entre 2 dates que tout capote, je ne sais pas aussi si quelque par il y a d'autres erreur, mais voici la fameuse requete Code :
merci Prince |
||
|
|
00
|
|
|
#2 | |
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
todate => to_date
GROUP BY CODECLT,CODECLT => Une seule fois c'est suffisant, et comme il n'y a pas de fonction de regroupement DISTINCT à la place de GROUP BY est utilisable. Si trandate est une date il est probable que les conversions soient inutiles. Une explication du besoin et les messages d'erreurs renvoyés seraient appréciables. Citation:
|
|
|
|
10
|
|
|
#3 |
|
Membre actif
![]() Inscription : février 2007 Messages : 167 ![]() |
Salut,
Expliquer ce que ça doit faire serait assez bon en effet. Le parenthésage me paraît incertain. Le && dans l'opération between aussi Tu es bien sous Oracle n'est-ce pas ? Pozzo |
|
|
00
|
|
|
#4 | ||||||
|
Invité de passage
![]() Inscription : avril 2007 Messages : 11 ![]() |
Code :
j'ai un peu remodeler et formater le code comme ceci : Code :
Code :
Prince |
||||||
|
|
00
|
|
|
#5 |
|
Membre actif
![]() Inscription : février 2007 Messages : 167 ![]() |
Coté syntaxe :
Si trandate est une date il n'y a pas besoin de convertir avec des to_date et d'ajouter des 1/1000. La date c'est trandate 1 heure après c'est trandate + 1/24 90 jours avant c'est trandate - 90 Coté conception : Le clause where s'applique à chaque ligne. Sur chaque ligne tu compares la date trandate à elle même diminuée de 90j ou augmentée d'une heure. Je ne pense pas que cela réponde au problème qui est de mesurer des différences de date entre deux enregistrement, ou plus exactement pour une ligne de vérifier qu'il n'y a pas d'autre ligne dans les 90 derniers jours. C'est plutôt une clause where not exists vers laquelle je m'orienterais. Je cherche une ligne pour laquelle il n'existe pas de ligne après trandate - 90 Accessoirement : Si toutes les dates sont décalées d'une heure et qu'on fait des comparaisons de date l'ajout d'une heure n'est pas utile car on mesure des intervales. Pozzo |
|
|
10
|
|
|
#6 | ||
|
Invité de passage
![]() Inscription : avril 2007 Messages : 11 ![]() |
Après avoir lu le dernier post de Pozzo, j'ai réfléchi effectivement sur le fond et la forme du code, après avoir supprimer beaucoup d'imperfections, la requete tourne effectivement sous oracle, mais malheureusement, ne me donne pas les bons résultats, voici la requete
Code :
|
||
|
|
00
|
|
|
#7 |
![]() ![]() |
Que contient comme valeur la colonne trandate ?
Si vous pouviez fournir un jeu de test petit mais fidèle à votre problématique, c'est le plus simple.
__________________
Email : http://scr.im/waldar |
|
00
|
|
|
#8 | ||||||||
|
Membre actif
![]() Inscription : février 2007 Messages : 167 ![]() |
Bonjour OBI-ONE,
Si vous travaillez sur les intervalles vous ne vous en tirerez qu'en faisant apparaître la table deux fois dans votre requête afin de comparer une ligne aux autres. Voici un exemple qui illustre le propos avec une table des clients et une table des commandes. Création de deux tables : Code :
Code :
Qui n'a pas commandé dans les 90 derniers jours ? Code :
---------- -------------------------------------------------- 2 Client2 Qui parmi les clients ayant commandé, a connu une période de 90 j sans commande et quand (hormis la première commande qui fatalement ne suit pas une autre commande) ? Code :
---------- ------------ 3 01/12/2010 1 01/11/2010 1 01/06/2010 En espérant que vous êtes encore par là. Pozzo |
||||||||
|
|
00
|
|
|
#9 | ||
|
Invité de passage
![]() Inscription : avril 2007 Messages : 11 ![]() |
Merci encore très cher Pozzo,
Ta démarche m'a inspiré, j'ai eu un moyen efficace de faire la difference entre date et jour. En fait quand je fait date - 90, Oracle me renvoit bien sure une date, mais pas avec 90 jours de moins, c'était souvent avec 30 ou 28 jours de moins, j'ai compris que mon pb ne setrouvait pas là, mais surtout a cause d'unix, pour rappel ma BD est installé sous unix. Pour se faire, j'ai trouvé une requete qui ne rate pas sa cible : Code :
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com