Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
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 03/03/2011, 14h09   #1
Invité régulier
 
Inscription : novembre 2010
Messages : 33
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 33
Points : 6
Points : 6
Par défaut Requete SQL d'agrégation

Bonjour,
Cela fait un petit moment que je n'ai plus fait de requête sql et j'aurai besoin d'un petit coup de main pour m'y remettre.
Le besoin est le suivant :
Une table regroupant un ensemble de tuples (col1, col2, col3)
- Dans col1 j'ai la possibilité de retrouver à plusieurs reprises la même valeur
- Dans col2 j'ai une date de création au format (xx.xx.xxxx)
J'ai besoin de compter le nombre d'occurence de col1 se trouvant entre deux bornes.
1ère borne : Date de début se trouvant être la date de la première occurence trouvée
2ème borne : Date de fin se trouvant être la date de la première occurence trouvée plus 12 mois.
Cette requête permet de mesurer le nombre de retour en l'espace de 12 mois d'un article par son no de série (col1).
Pouvez-vous m'aiguiller sur la manière de procéder ?
Un grand merci
Jask
jaskoula1979 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2011, 17h14   #2
Membre chevronné
 
Homme O. Joly
Support
Inscription : décembre 2010
Messages : 287
Détails du profil
Informations personnelles :
Nom : Homme O. Joly
Âge : 38
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Support
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2010
Messages : 287
Points : 617
Points : 617
Premiere occurrence de col2

Code sql :
1
2
3
4
select t.col1
     , count(*)
from table t, (select col2 from table where col2 is not null and rownum=1) u
where t.col2 between u.col2 and add_monthS(u.col2,1);

Valeur minimale de col2

Code sql :
1
2
3
4
select t.col1
     , count(*)
from table t, (select min(col2) c2 from table) u
where t.col2 between u.c2 and add_monthS(u.c2,1);
ojo77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2011, 17h44   #3
Invité régulier
 
Inscription : novembre 2010
Messages : 33
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 33
Points : 6
Points : 6
Quelqu'un aurait il une esquisse de solution ?
afin que je puisse partir sur une piste tangible ?
A+
Jask
jaskoula1979 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 03/03/2011, 17h48   #4
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 459
Points : 10 459
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Relisez votre discussion.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2011, 18h09   #5
Invité régulier
 
Inscription : novembre 2010
Messages : 33
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 33
Points : 6
Points : 6
Désolé mon browser n'a pas réactualisé le fil.
Je regarde cela.
Jask
jaskoula1979 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2011, 09h17   #6
Invité régulier
 
Inscription : novembre 2010
Messages : 33
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 33
Points : 6
Points : 6
Merci beaucoup ojo77,

J'ai modifié la requête de manière à répondre au besoin suivant.
En 2008 (année de référence) nous avons eu un retour d'un article.
Il nous faut pouvoir savoir si cet article est revenu une seconde fois (ou plus) en l'espace de 12 mois depuis la première réparation.

La requête a été modifiée en ce sens :
Code :
1
2
3
4
5
6
SELECT count(*) NbreSerie,col1
FROM TABLE, (SELECT col2 FROM TABLE WHERE col2 IS NOT NULL 
AND to_char(col2,'yyyy')='2008' AND rownum=1) u
WHERE col2 BETWEEN u.col2 AND add_months(u.col2,12)
GROUP BY col1
ORDER BY NbreSerie DESC;
Cependant, en testant cette requête les enregistrements portent sur une année +1 sans englober l'année 2008
Exemple :
Code :
1
2
3
4
3|001-AA
3|002-BB
3|003-CC
2|004-DD
Si je vais vérifier 001-AA, je tombe sur les dates suivantes :
12.02.2009
17.03.2009
01.07.2009
Et aucune pour 2008 (il n'en existe pas pour la valeur 001-AA).
Comment puis-je modifier la requête afin qu'elle puisse répondre à mon besoin ?

Merci encore,

Jask
jaskoula1979 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2011, 16h22   #7
Membre du Club
 
Inscription : novembre 2008
Messages : 46
Détails du profil
Informations personnelles :
Localisation : Royaume-Uni

Informations forums :
Inscription : novembre 2008
Messages : 46
Points : 51
Points : 51
Voila un script qui fait je crois exactement ce aue tu recherches :

Code sql :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
WITH t1 AS 
(
SELECT '101' AS my_id, SYSDATE-254 AS my_date FROM dual UNION ALL
SELECT '101' AS my_id, SYSDATE-25 AS my_date FROM dual UNION ALL
SELECT '101' AS my_id, SYSDATE+453 AS my_date FROM dual UNION ALL
SELECT '102' AS my_id, SYSDATE AS my_date FROM dual UNION ALL
SELECT '101' AS my_id, SYSDATE+150 AS my_date FROM dual
)
SELECT t1.my_id, 
       COUNT(*) 
FROM t1 ,
     (SELECT my_id, 
		         MIN(my_date) min_date
		  FROM t1 t2 
			GROUP BY my_id) tmp_min_date
WHERE t1.my_id = tmp_min_date.my_id 
AND   t1.my_date < add_months(tmp_min_date.min_date, 12)
GROUP BY t1.my_id
Jorafali est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2011, 18h20   #8
Invité régulier
 
Inscription : novembre 2010
Messages : 33
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 33
Points : 6
Points : 6
Ouh ca m'a l'air pas mal du tout.
Merci beaucoup pour la suggestion.
Je reviendrai poster le résultat et certainement quelques questions sur le fonctionnement (j'aime bien comprendre).
Merci encore
Jask
jaskoula1979 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 15h29.


 
 
 
 
Partenaires

Hébergement Web