IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Oracle 10g - calcul sur les dates


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Oracle 10g - calcul sur les dates
    Impossible de faire un calcul sur une date. Ce calcul serait pour savoir si il existe des lignes identiques à la 1ere trouvée mais avec une date < à 3 jours comparé à la 1ere ligne trouvée.
    voici l'ordre oracle sans le calcul :
    select NEWS_ID, NEWNOT, TO_CHAR(DATE_PARADOX_To_ORA(NEWDAT),'Day DD/MM/YYYY HH24:MI:SS') as DATORG, NEWCOD FROM NEWS WHERE NEWCOD LIKE 't%' AND NEWNOT like '$param1%' order by NEWNOT DESC, DATORG DESC

  2. #2
    Membre éprouvé Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Points : 1 067
    Points
    1 067
    Par défaut
    si il existe des lignes identiques à la 1ere trouvée mais avec une date < à 3 jours
    il te faut une autojointure, non ?

    comment est-ce que tu détermines la "1ère trouvée" ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    La 1ere ligne correspond à la requete mise dans mon 1er message.
    Je la remet ici :
    select NEWS_ID, NEWNOT, TO_CHAR(DATE_PARADOX_To_ORA(NEWDAT),'Day DD/MM/YYYY HH24:MI:SS') as DATORG, NEWCOD FROM NEWS WHERE NEWCOD LIKE 't%' AND NEWNOT like '$param1%' order by NEWNOT DESC, DATORG DESC

  4. #4
    Membre confirmé
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Points : 562
    Points
    562
    Par défaut
    Vous pouvez peut etre vous inspirer de ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Select N1.NEWS_ID, N1.NEWNOT,
           TO_CHAR(DATE_PARADOX_To_ORA(N1.NEWDAT),'Day DD/MM/YYYY HH24:MI:SS') as DATORG,
           N1.NEWCOD
    FROM NEWS N1 
    WHERE N1.NEWCOD LIKE 't%'
    AND   N1.NEWNOT like '$param1%'
    AND   Exists
                  (
                   --  Egalité sur Les Données Recherchées
                   --  Mais Verification que la date est au moins 
                   --  inferieur de 3 Jours sur la date de reference
                   Select 'X' from NEWS N2
                   Where  N2.NEWS_ID = N1.NEWS_ID
                   And    N2.NEWNOT  = N1.NEWNOT
                   And    N2.NEWCOD  = N1.NEWCOD
                   AND    N2.NEWDAT  < (N1.NEWDAT - 3)
                  )
    order by N1.NEWNOT DESC, N1.NEWDAT DESC
    Signé : Capitaine Jean-Luc Picard

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    argoet, merci pour ce début de réponse, ça me permet d'avancer.

    Le seul probleme est que mon champ NEWDAT est de type varchar2 et donc impossible de lui soustraire 3 (correspondant à 3 jours) ainsi.

    Il me faudrait convertir ce champs en nombre ou en date... Mais comment dire à oracle d'enlever 3 jours à une date de format :
    Jeudi 29/03/2007 03:08:14

    ???

    Merci pour votre aide...

  6. #6
    Membre confirmé
    Avatar de Mindiell
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    735
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 735
    Points : 546
    Points
    546
    Par défaut
    as-tu regarder les fonctions d'Oracle ?
    peut-etre existe-t-il un dateadd comme dans SQL server ?
    Mindiell
    "Souvent, femme barrit" - Elephant man

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Merci Mindiel pour cette piste. Enfin de compte j'ai utilisé la fonction datediff (date1-date2 pour l'equivalence oracle).

    Donc l'ordre oracle devient :

    SELECT N1.NEWS_ID, N1.NEWNOT,
    TO_CHAR(DATE_PARADOX_To_ORA(N1.NEWDAT),'Day DD/MM/YYYY HH24:MI:SS') AS DATORG,
    N1.NEWCOD
    FROM NEWS N1
    WHERE N1.NEWCOD LIKE 't%'
    AND EXISTS
    (
    -- Egalité sur Les Données Recherchées
    -- Mais Verification que la date est au moins
    -- inferieur de 3 Jours sur la date de reference
    SELECT 'X' FROM NEWS N2
    WHERE N2.NEWS_ID != N1.NEWS_ID
    AND N2.NEWNOT = N1.NEWNOT
    AND N2.NEWCOD = N1.NEWCOD
    AND DATE_PARADOX_To_ORA(N1.NEWDAT) - DATE_PARADOX_To_ORA(N2.NEWDAT) = 3
    )
    ORDER BY N1.NEWNOT DESC, N1.NEWDAT DESC

    Encore merci à argoet, sans qui j'aurais jamais trouvé !

    Le soucy qu'il me reste est que ainsi le tri sur fait sur 3 jours mais enfait j'aimerai pouvoir le faire au bout de 3 apparitions et cela sans se préoccupper de la date car en fait un meme NEWNOT peut exister sur une meme journée avec le meme NEWCOD mais un NEWS_ID différent...

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Merci à tous, le blem est résolu en interne en optimisant la table par ajout d'une colonne qui effectue un count assez complexe...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. calcul sur les dates
    Par housni dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/08/2007, 16h38
  2. Calcul sur les dates
    Par Stargate SG1 dans le forum Access
    Réponses: 2
    Dernier message: 04/02/2007, 16h09
  3. [Oracle 10g] Question sur les sous-requetes
    Par hotkebab99 dans le forum Oracle
    Réponses: 2
    Dernier message: 27/10/2006, 11h25
  4. [Dates] Calcul sur les dates...
    Par gawelldanor dans le forum Langage
    Réponses: 10
    Dernier message: 04/04/2006, 11h07
  5. [C#] Calcul sur les dates avec des DateTimePicker
    Par alizee971 dans le forum Windows Forms
    Réponses: 10
    Dernier message: 02/04/2005, 17h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo