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

SQL Oracle Discussion :

Création vue, fonctions d'agrégation


Sujet :

SQL Oracle

  1. #1
    Membre chevronné Avatar de MetalGeek
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 412
    Par défaut Création vue, fonctions d'agrégation
    Bonjour,

    étant données deux tables, disons :
    Table1 : horodatage (date), valeur1 (nombre), valeur2(nombre)...
    Table2 : horodatage(date), valeur3(nombre)

    où les colonnes 'horodatage' sont indexées et uniques, mais avec des valeurs différentes pour les deux tables (jamais Table1.horodatage = Table2.horodatage), je dois créer une vue où doivent figurer toutes les colonnes de Table1 + la moyenne des valeur3 de Table2, quand Table2.horodatage est à 5minutes près de Table1.horodatage. Il ne doit y avoir qu'une ligne renvoyée pour chaque Table1.horodatage...

    Pour le moment j'ai ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT Table1.horodatage, valeur1, valeur2, AVG(valeur3) 
    FROM Table1, Table2
    WHERE Table2.horodatage BETWEEN (Table1.horodatage - interval '5' minute) and (Table1.horodatage + interval '5' minute)
    GROUP BY Table1.horodatage, valeur1, valeur2
    et j'hésite avec ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT horodatage, valeur1, valeur2, (SELECT AVG(valeur3) 
                                                         FROM Table2
                                                         WHERE Table2.horodatage
                                                          BETWEEN (Table1.horodatage -                                                       interval '5' minute) AND (Table1                                                       .horodatage + interval '5' minute)
    FROM Table1

    Questions :
    -est-ce que les requêtes ci-dessus sont correctes, si oui laquelle est la mieux ?
    -y-a-t-il un meilleur moyen de faire ? La véritable requête comporte plusieurs dizaines de colonnes dans chaque table, et des centaines de milliers de lignes sont stockées dans la base... Donc je vous raconte pas le temps que ça prend (une fois la vue créée, je doit récupérer les données en filtrant selon une fenêtre de dates).

    Merci pour vos lumières...

  2. #2
    Scorpi0
    Invité(e)
    Par défaut
    Salut,

    Je ne serai pas contre un jeu de données pour tester, mais je pense à un truc de ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select   Table1.horodatage, valeur1, valeur2, 
    AVG(valeur3) over(partition by Table1.horodatage order by  Table2.horodatage RANGE BETWEEN '5 minutes' PRECEDING  AND '5 minutes' FOLLOWING)
    FROM Table1, Table2

  3. #3
    Membre chevronné Avatar de MetalGeek
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 412
    Par défaut
    Salut et merci pour ta réponse,
    en fait je ne connais pas le PL/SQL (d'habitude je bosse avec SQL Server) ; je vais tester ça !

  4. #4
    Membre Expert Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Par défaut
    sinon il y les vues materialisées

    main que ce soit les vues materialisées et/ou fonctions anaytiques il faut un minimun, et c'est la version Oracle

    comme ce n'etait pas précisée ....

  5. #5
    Scorpi0
    Invité(e)
    Par défaut
    Ta première requête fonctionne en tout cas. Donc fait un test sur de gros volumes et avises si ta base explose ou pas !!

  6. #6
    Membre chevronné Avatar de MetalGeek
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 412
    Par défaut
    Merci pour vos réponses, je vais faire des tests avec les différentes solutions (et me renseigner sur les vues matérialisées/fonctions analytiques etc., venant du monde Microsoft je n'en ai jamais entendu parler !).

    Bonne journée à tous

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

Discussions similaires

  1. Quel SGBD permet d'écrire ses fonctions d'agrégation SQL?
    Par Machin0410 dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 28/03/2006, 17h31
  2. [ora-00942] création vue
    Par logica dans le forum Oracle
    Réponses: 2
    Dernier message: 19/12/2005, 09h48
  3. Création vue avec test d'existence
    Par yan77 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/12/2004, 11h44
  4. [SQL] Combiner fonction d'agrégation et DISTINCT .
    Par p@radox dans le forum Langage SQL
    Réponses: 5
    Dernier message: 02/12/2004, 17h11
  5. méssage d'erreur fonction d'agrégat
    Par developpeur_mehdi dans le forum Langage SQL
    Réponses: 4
    Dernier message: 10/03/2004, 12h42

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