Précédent   Forum des professionnels en informatique > Bases de données > DB2
DB2 Forum d'entraide technique sur la base de données DB2. Voir aussi -> Rubrique DB2
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/07/2007, 10h01   #1
Invité régulier
 
Inscription : janvier 2006
Messages : 32
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 32
Points : 7
Points : 7
Par défaut Simplification Requête SQL

Bonjour, j'ai une requête SQL qui fonctionne
mais je n'arrive pas à la simplifier, sans modifier l'exactitude des résultats. Ca doit pas être trop dur pourtant. Je pense qu'il faut passer par l'autojointure.

Si vous pouviez me donner un coup de main, ça serait sympa.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT SUM((FR.FRO_KM_FIN_JOUR) - (FR.FRO_KM_DEBUT_JOUR)) AS KMPERIODETOTAL,
       (SELECT SUM((FRT.FRO_KM_FIN_JOUR) - (FRT.FRO_KM_DEBUT_JOUR))
        FROM   FEUILLE_ROUTE FRT
        WHERE  FRT.ABO_CODE = 'P310') AS KMTOTALAGENT,
       (SELECT SUM(KMIA.KMJ_KM_JOUR)
        FROM   KM_JOUR AS KMIA
        WHERE  FRO_DATE BETWEEN '2007-06-02'
                                AND '2007-12-31'
               AND ABO_CODE = 'P310'
               AND CAC_CODE = 'IA') AS KMPERIODEIA
FROM   FEUILLE_ROUTE FR
WHERE  FR.FRO_DATE BETWEEN '2007-06-02'
                           AND '2007-12-31'
       AND FR.ABO_CODE = 'P310'
Merci
LeNovice est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/07/2007, 10h06   #2
Membre émérite
 
Avatar de Mathusalem
 
Inscription : décembre 2003
Messages : 994
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 994
Points : 914
Points : 914
pour la rentre plus lisible déjà
Code :
1
2
3
4
5
6
SELECT SUM((FR.FRO_KM_FIN_JOUR)-(FR.FRO_KM_DEBUT_JOUR)) AS KmPeriodeTotal, (SELECT SUM((FRT.FRO_KM_FIN_JOUR)-(FRT.FRO_KM_DEBUT_JOUR)) 
FROM FEUILLE_ROUTE FRT 
WHERE FRT.ABO_CODE='P310') AS KmTotalAgent, (SELECT SUM(KMIA.KMJ_KM_JOUR) 
FROM KM_JOUR AS KMIA WHERE FRO_DATE BETWEEN '2007-06-02' AND '2007-12-31' AND ABO_CODE='P310' AND CAC_CODE='IA') AS KmPeriodeIA
FROM FEUILLE_ROUTE FR
WHERE FR.FRO_DATE BETWEEN '2007-06-02' AND '2007-12-31' AND FR.ABO_CODE='P310'

ensuite, tu ne veux pas nous expliquer en français ce que c'est sensé faire, et donner le DDL des tables ?
__________________
Solidarités Nouvelles face au Chômage association loi de 1901, indépendante de tout parti politique et de toute confession religieuse.
Mathusalem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/07/2007, 10h57   #3
Invité régulier
 
Inscription : janvier 2006
Messages : 32
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 32
Points : 7
Points : 7
1er argument du select (as KmPeriodeTotal) : KM parcourus par un agent pour une période donnée

2nd argument du select (as KmTotalAgent) : KM parcourus par un agent (toutes les valeurs de la tables le concernant : pas de période précise)

3nd argument du select (as KmPeriodeIA) : KM parcourus par un agent pour une période donnée et une activité précise (CAC_CODE='IA')

------------------------------

FEUILLE_ROUTE : table contenant les informations de route d'une journée pour un agent terrain. (ABO_CODE, FRO_DATE,FRO_KM_DEBUT_JOUR,FRO_KM_FIN_JOUR) : agent, date, km début journée, km fin journée

KM_JOUR :table contenant le détail par activité des km réalisés pour un agent pour un jour donnée (CAC_CODE,ABO_CODE, KMJ_KM_JOUR) : activité (ia...), agent, kilmoètres de la journée pour l'activité en question
LeNovice est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/07/2007, 10h59   #4
Membre Expert
 
Inscription : avril 2005
Messages : 1 672
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 1 672
Points : 1 337
Points : 1 337
Quel est :
- la volumétrie des tables concernées
- votre SGBD et sa version
- votre temps d'exécution actuel ?
__________________
Modérateur des forums Oracle et Langage SQL
Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum
Magnus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/07/2007, 11h48   #5
Invité régulier
 
Inscription : janvier 2006
Messages : 32
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 32
Points : 7
Points : 7
- SGBD : DB2 8.1
- Volumétrie des tables concernés (plusieurs milliers de lignes : appelez à croite quotiennement pour des dizaines d'agent)
- Temps d'éxeuctiona actuelle (5s + utilisation dans Jasper/Ireport avec d'autres requêtes) dont optimisation du tps d'éxeuction et donc de la requête nécessaire !
LeNovice est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/07/2007, 11h53   #6
Membre Expert
 
Inscription : avril 2005
Messages : 1 672
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 1 672
Points : 1 337
Points : 1 337
Hum... rien d'affolant, ce qui justifie d'ailleurs que la norme SQL ne prévoit pas grand chose à optimier dans votre requête.
En tout cas, sans retoucher le modèle, je ne vois pas ce qui pourrait être améliorer ici.
Les fonctions d'aggréagation sont coûteuses donc vous faîtes 3 appels dans la même requête donc vous en payez le prix

Pour les 2 requêtes de la clause SELECT l'une d'entre elle opère sur une table différente de la table de la requête principale et l'autre ne possède pas les mêmes conditions que la requête principale

Je peux déplacer votre discussion dans le forum DB2 si vous le souhaitez ?
__________________
Modérateur des forums Oracle et Langage SQL
Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum
Magnus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/07/2007, 13h47   #7
Invité régulier
 
Inscription : janvier 2006
Messages : 32
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 32
Points : 7
Points : 7
En effet, rien d'affolant, mais comme je ne maitrise pas sur le bout des doigts le langage SQL, je m'interrogeais sur le fait que cette requête puisse être optimisé ? Les temps d'execution sont pour le moment correct, mais à terme, ils devraient logiquement s'allonger. Si quelqu'un à d'éventuelles solutions, n'hésitez pas !

Merci.

Vous pouvez éventuellement déplacer la requête sur le forum DB2
LeNovice est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h56.


 
 
 
 
Partenaires

Hébergement Web