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 18/11/2010, 12h06   #1
Invité de passage
 
BASTI
Consultant informatique
Inscription : juin 2010
Messages : 42
Détails du profil
Informations personnelles :
Nom : BASTI
Localisation : France

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : juin 2010
Messages : 42
Points : 3
Points : 3
Par défaut Requête SQL : plage de reçus

Bonjour,
encore une fois je me tourne vers vous pour demander de l'aide.
en fait j'ai la table suivante :

Site (ID_site, ref_site)
Reçu (ID_reçu, ref_reçu, ID_site)

un site peut avoir un ou plusieurs reçus.

les reçus sont divisés par plage, c'est à dire, on trouve des reçus de 1--1000, d'autre de 1020--1004, d'autre de 2058--2100.

on appel cela des plages de reçu.

ma demande consiste à trouver ces plages dans la table Reçu.

en utilisant la min et max, je n'ai pu avoir qu'une seule plage incorrecte, car ça donne le min et le max dans tous les ref_reçu.

y'a t-il une requête ou fonction sql qui me permet d'afficher les plages de site (Ref_site) sans prendre en compte les sauts vides tel que entre 1005 et 2058.

merci
complicated est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 18/11/2010, 14h01   #2
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 930
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 930
Points : 17 724
Points : 17 724
Dans une base de données, vous n'y trouverez que ce que vous y mettez. SI ces informations n'y figurent pas, vous ne pourrez pas les obtenir magiquement !

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 14h19   #3
Invité de passage
 
BASTI
Consultant informatique
Inscription : juin 2010
Messages : 42
Détails du profil
Informations personnelles :
Nom : BASTI
Localisation : France

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : juin 2010
Messages : 42
Points : 3
Points : 3
Citation:
Envoyé par SQLpro Voir le message
Dans une base de données, vous n'y trouverez que ce que vous y mettez. SI ces informations n'y figurent pas, vous ne pourrez pas les obtenir magiquement !

A +
bjr, apparament vous m'avez pas bien compris. je procède par exemple:
j'ai la table site qui contient SITE [(ID_site_1,REF_1 )(ID_site_2, REF_2)(ID_site_3, REF_3)]
et la table Reçu [(ID_1, 1 ,ID_site_1 )(ID_2, 2 ,ID_site_1)(ID_3, 3 ,ID_site_1)(ID_4, 4 ,ID_site_1)(ID_30, 30 ,ID_site_1)(ID_31, 31 ,ID_site_1)]

le résultat que je veux avoir correspond au deux plage qui existe pour ID_SITE_1 qui sont deux plage (1--4) et (30--31). la requête doit différencier ces plage.
complicated est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 18/11/2010, 14h48   #4
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 680
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 680
Points : 10 473
Points : 10 473
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Tout le monde comprend dès lors que sont suivies les règles du forum.

Il manque trop d'informations pour vous aider, notamment le SGBD, le moyen de créer un jeu de données en entrée, la requête où vous en êtes qui vous bloque et ce que vous attendez en sortie.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 18/11/2010, 15h27   #5
Invité de passage
 
BASTI
Consultant informatique
Inscription : juin 2010
Messages : 42
Détails du profil
Informations personnelles :
Nom : BASTI
Localisation : France

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : juin 2010
Messages : 42
Points : 3
Points : 3
Citation:
Envoyé par Waldar Voir le message
Tout le monde comprend dès lors que sont suivies les règles du forum.

Il manque trop d'informations pour vous aider, notamment le SGBD, le moyen de créer un jeu de données en entrée, la requête où vous en êtes qui vous bloque et ce que vous attendez en sortie.
comme complément a ma demande ci-dessous le script

Code :
1
2
3
4
5
6
7
8
9
10
11
SELECT site.ref_site,
       min(to_number(SUBSTR(recu.ref_recu,INSTR(recu.ref_recu,'/')+1))) AS debut,
       max(to_number(SUBSTR(recu.ref_recu,INSTR(recu.ref_recu,'/')+1))) AS fin
 
  FROM 
       recu,
       site
 
 WHERE 
 
       site.ID_SITE = reçu.ID_SITE
merci
complicated est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 18/11/2010, 15h33   #6
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 680
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 680
Points : 10 473
Points : 10 473
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Merci de lire le lien précédent.

Plus la présentation de votre problème est claire, synthétique et bien présentée, plus vite vous obtiendrez une réponse exacte.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 18/11/2010, 16h18   #7
Membre éprouvé
 
Avatar de xdescamp
 
Homme Xavier Descamps
Inscription : octobre 2008
Messages : 297
Détails du profil
Informations personnelles :
Nom : Homme Xavier Descamps
Âge : 36
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2008
Messages : 297
Points : 422
Points : 422
Envoyer un message via Skype™ à xdescamp
La requête suivante devrait donner un bon point de départ :
Code sql :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
WITH SITE AS
     (SELECT 'ID_site_1' AS id_site, 'REF_1' AS ref_site FROM Dual Union ALL
     SELECT 'ID_site_2' AS        , 'REF_2' AS          FROM Dual Union ALL
     SELECT 'ID_site_2' AS        , 'REF_2' AS          FROM Dual ),
RECU AS
     (SELECT 'ID_1' AS id_recu, 1 AS ref_recu ,'ID_site_1' AS id_site FROM Dual Union ALL
     SELECT 'ID_2'           , 2             ,'ID_site_1'            FROM Dual Union ALL
     SELECT 'ID_3'           , 3             ,'ID_site_1'            FROM Dual Union ALL
     SELECT 'ID_4'           , 4             ,'ID_site_1'            FROM Dual Union ALL
     SELECT 'ID_30'          , 30            ,'ID_site_1'            FROM Dual Union ALL
     SELECT 'ID_31'          , 31            ,'ID_site_1'            FROM Dual )
SELECT site.ref_site,
       min (ref_recu) AS debut,
       max (ref_recu) AS fin
FROM site,
     (SELECT id,
             id_site,
             ref_recu,
             max(debut_plage_recu) over (partition BY id_site ORDER BY ref_recu) AS debut_plage_recu
      FROM (SELECT id,
                   ref_recu,
                   id_site,
                   decode (lag (ref_recu) over (partition BY id_site ORDER BY ref_recu), ref_recu-1, NULL, ref_recu) AS debut_plage_recu
            FROM recu
            ) recu_v1
      ) recu_v2
WHERE site.id_site = recu_v2.id_site
GROUP BY site.ref_site,
         recu_v2.debut_plage_recu
xdescamp 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 08h05.


 
 
 
 
Partenaires

Hébergement Web