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] selection du max en groupand par date


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2003
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2003
    Messages : 57
    Par défaut [Oracle] selection du max en groupand par date
    Bonjour,

    J'ai une table contenant les carnets d'ordre d'actions boursieres dont j'aimerais afficher certains éléments...
    En gros ma table ressemble a ceci :

    Date ACHAT_VENTE PRIX
    12:51:50 ACHAT 28.08
    12:51:30 ACHAT 27.08
    12:51:20 ACHAT 28.05
    12:50:30 ACHAT 28.01
    12:51:50 VENTE 28.08
    12:51:30 VENTE 27.08
    12:51:20 VENTE 28.05
    12:50:30 VENTE 28.01

    Voila j'aimerais pouvoir selectionner la valeur maxi pour l'achat (respectivement vente) pour chaque minute....

    C'est a dire avoir en sortie quelque chose de ce genre :
    12:51 ACHAT 28.08
    12:50 ACHAT 28.01


    Quelqu'un peut il m'aider car je suis bloqué la dessus depuis hier soir....

  2. #2
    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
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Date, ACHAT_VENTE, MAX(Prix)
    FROM laTable
    GROUP BY Date
    Remarque : Date est un mot réservé, il vaut mieux ne pas donner ce nom à une colonne (DateTransaction par exemple)

    Oops : pas réveillé ce matin, il faut bien sur extraire la date jusqu'à la minute, et la fonction pour faire cela dépend de ton SGBD, tous n'implémentant pas la syntaxe normée (EXTRACT)

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 7
    Par défaut
    Bonjour,

    Pour regrouper par heure/minute,
    J'essayerai bien quelque chose du genre :

    Select (date - second(date)) , ACHAT_VENTE, max( PRIX )
    group by (date - second(date)) , ACHAT_VENTE

    Reste à trouver la syntaxe exacte de (date - second(date)) qui renverra l'heure arrondie à la minute inférieure. Cette syntaxe dépend du SGBD.

    Bon courage.

  4. #4
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2003
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2003
    Messages : 57
    Par défaut
    Mediat > pour Date, en fait le nom que j'ai donné ne correspond pas au noms des colonnes

    Par contre je suis sous oracle et si je fais un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT dateheure, MAX(prix) 
    FROM carnet_ordre 
    GROUP BY TO_CHAR(dateheure, 'HH24:MI')
    Ca ne marche pas....
    De plus, je pense que si la requete avoisine ce que tu m'as donné j'arrete l'informatique..... Ou tout du moins j'arrete de programmer jusqu'a 2h du mat.....

  5. #5
    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
    Par défaut
    Sous ORACLE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT TO_CHAR(dateheure, 'HH24:MI'), MAX(prix) 
    FROM carnet_ordre 
    GROUP BY TO_CHAR(dateheure, 'HH24:MI');
    Mais ainsi cela mélange les ACHAT et les VENTES, si tu veux les distinguer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT TO_CHAR(dateheure, 'HH24:MI'), Achat_Vente, MAX(prix) 
    FROM carnet_ordre 
    GROUP BY TO_CHAR(dateheure, 'HH24:MI'), Achat_Vente;

  6. #6
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2003
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2003
    Messages : 57
    Par défaut
    Merci pour ta reponse....
    C'est effectivement cela..... Mais (il y a toujours un mais ) j'ai un autre soucis.... Car la requete finale a laquelle je veux aboutir est un peu plus compliqué.....

    Cette fois je donne la structure de la table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      CODE VARCHAR2(10) 
      DATEHEURE DATE 
      ACHAT_VENTE VARCHAR(5) 
      RANG NUMBER
      PRIX NUMBER(8,2)
      QTITE_TITRE NUMBER (8)
      NOMBRE_ORDRE NUMBER (3)
    Le but de ma requete est comme dit precedemment d'afficher le max pour chaque minute....
    Je vais un peu compléter ce point....
    En fait dans la base de données sont stockés des données sur plusieurs mois (pas toujours complet)
    Le but de ma requete est d'afficher les 10 ( ou plus ) derniers ordres....
    Il faut donc pour chaque entrée selectionner afficher l'ensemble des valeurs...


    Avant j'effectuais une requete plus simple ou je prenais l'ensemble des dernieres valeurs sans les regrouper par minute :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    String fq1 = "SELECT TO_CHAR(dateheure, 'HH24:MI:SS') AS \"Heure\", nombre_ordre AS \"#Achat\", qtite_titre AS \"Qté\", TO_CHAR(prix, '9999.99') AS \"Prix\" 
    FROM carnet_ordre,titre WHERE titre.nom = '"+it+"' 
    AND titre.code = carnet_ordre.code"
     
    SELECT * 
    FROM ("+fq1+" AND achat_vente = 'ACHAT' ORDER BY dateheure DESC)
    WHERE ROWNUM <="+nbval;
    J'aimerais donc refaire cette meme requete mais en regroupant les minutes et en gardant uniquement le max (par rapport au prix pour chaque minute)....
    La reponse de Mediat est un debut de reponse mais je suis toujours bloqué

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 03/02/2009, 10h51
  2. trier par date max d'un client
    Par ccluz dans le forum Langage SQL
    Réponses: 14
    Dernier message: 08/02/2008, 15h36
  3. Selection par date/mois
    Par Faro dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 04/06/2007, 14h29
  4. Select Avec Max(date)
    Par Poisson59 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 24/08/2006, 17h26
  5. selection par date
    Par adgabd dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 12/01/2004, 10h28

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