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 :

[MySQL 5] Double tri sur date et time


Sujet :

Langage SQL

  1. #1
    Membre régulier Avatar de titoine1978
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2005
    Messages : 132
    Points : 90
    Points
    90
    Par défaut [MySQL 5] Double tri sur date et time
    Bonjour,

    Je galère depuis hier pour écrire ma requête. Ca doit être simple mais je débute avec ce language. Google ne sort rien, pourtant le cas doit être courant...

    J'ai une table avec des champs date (ex: 2006-06-18), time(ex: 09:58:00), valeur1, valeur2.

    Je veux récuperer mes valeur1, valeur2 qui se trouvent dans une certaine période. Exemple : celles qui se trouvent entre 2006-01-12 à 12:45:00 et 2006-06-18 à 09:58:00
    Comment faire ? Il doit y avoir une intersection quelque part.
    Peut-on le faire avec des unions ? J'ai essayé mais je coince lorsque les date de debut et de fin sont les mêmes ou à un jour d'intervalle.

    Voila, si vous avez une idée.
    Merci.

  2. #2
    Membre expert
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199
    Points : 3 103
    Points
    3 103
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WHERE	( jour >= '2006-01-12' AND heure >= '09:58:00')
    AND 	(jour <= '2006-06-18' AND  heure <= '12:45:00')

  3. #3
    Membre régulier Avatar de titoine1978
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2005
    Messages : 132
    Points : 90
    Points
    90
    Par défaut
    Merci pour ta réponse, mais ca ne fonctionne pas, ca m'exclus certains enregistrements. Ma requete calqué sur la tienne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT `abs_pressure`,`date`,`time` FROM `data` WHERE  (date>="2006-06-14" AND time>="04:00:00") AND (date<="2006-06-17" AND  time<="15:45:00")
    Dans l'exemple que tu donnes, seuls les enregistrements entre 09:58:00 et 12:45:00 de chaque jours sont renvoyés.

    Ce sont les bornes qui posent problèmes.

  4. #4
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    TheLeadingEdge >> Ohhhh, erreur très étonnante de ta part
    Avec ta requête on ne trouve pas Jour = '2006-02-12' et heure = '09:00:00'.

    La meilleure solution serait d'avoir une colonne avec date et heure, sinon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WHERE	jour || '-' || heure >= '2006-01-12-09:58:00'
      AND 	jour || '-' || heure <= '2006-06-18-12:45:00'
    || est l'opérateur de concaténation (je ne sais pas si c'est cela avec mySQL)

  5. #5
    Membre régulier Avatar de titoine1978
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2005
    Messages : 132
    Points : 90
    Points
    90
    Par défaut
    Merci Médiat, ta méthode fonctionne bien, avec MySQL c'est CONCAT(jour,"-",heure).

    Est-ce qu'il y a d'autres méthodes qui pourraient être plus rapides ?

  6. #6
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    La meilleure solution est une colonne de type DATETIME

  7. #7
    Membre expert
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199
    Points : 3 103
    Points
    3 103
    Par défaut
    oops :oops:

    et ça c'est mieux ???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    WHERE CAST(CONCAT(jour,' ',heure) AS datetime) 
    BETWEEN CAST( '2006-01-12 09:58:00' AS DATETIME)  
    AND CAST('2006-06-18 12:45:00'  AS DATETIME);
    [edit]@MédiatJ'avais pas vu que tu avais déjà corrigé.
    Citation Envoyé par Médiat
    TheLeadingEdge >> Ohhhh, erreur très étonnante de ta part
    Avec ta requête on ne trouve pas Jour = '2006-02-12' et heure = '09:00:00'.
    Ton étonnement me sonne presque comme 1 compliment :mrgreen:
    [/edit]

  8. #8
    Membre régulier Avatar de titoine1978
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2005
    Messages : 132
    Points : 90
    Points
    90
    Par défaut
    La méthode de Médiat est un peu plus rapide.
    Pour 25000 enregistrements 2900ms contre 2980ms pour la seconde méthode.
    La seconde me semble plus propre avec le cast.

    Merci a vous deux.

  9. #9
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Citation Envoyé par TheLeadingEdge
    Ton étonnement me sonne presque comme 1 compliment
    C'en était un

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

Discussions similaires

  1. tri sur dates
    Par yalefe dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 13/09/2009, 16h56
  2. [PerformancePoint] Tri sur date dans Dashboard Designer
    Par Sam3oul dans le forum Microsoft BI
    Réponses: 0
    Dernier message: 09/09/2009, 14h06
  3. MySQL + c++ builder : Filtre sur date inposible
    Par fpascal dans le forum MySQL
    Réponses: 8
    Dernier message: 09/10/2008, 09h46
  4. requete avec tri sur date erronée
    Par olivll dans le forum Access
    Réponses: 11
    Dernier message: 20/10/2005, 15h45
  5. [Interbase 6] tri sur date et SQL
    Par Yogy dans le forum InterBase
    Réponses: 6
    Dernier message: 21/06/2005, 09h15

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