Requête de fou furieux (en tout cas pour moi)

Le newbie Messages postés 200 Date d'inscription mardi 17 octobre 2006 Statut Membre Dernière intervention 24 mars 2012 - 19 mai 2010 à 16:09
cs_Tolliap Messages postés 60 Date d'inscription lundi 4 décembre 2006 Statut Membre Dernière intervention 11 janvier 2013 - 2 juin 2010 à 07:50
Bonjour, j'ai une requête à construire qui me pose problème

Voici la structure de la table :

id (non unique) deb fin Secteur
1 0 15 1
2 0 0 1
2 140 0 2
2 12 30 3
3 10 2 1
3 4 60 2
3 0 80 3
....

La requête que je dois faire doit retourner tous les enregistrement ayant trois secteurs (donc id 2 et 3 pour l'instant) et uniqement ceux qui ont un deb dans le secteur 2 supérieur à la fin du secteur 3 (maintenant il ne doit rester que les enregistrements de l'id 2).

Si vous avez une solution quelconque je prends de suite. En tout cas merci d'avance à tous ceux qui se pencheront sur ce problème.

2 réponses

cs_Tolliap Messages postés 60 Date d'inscription lundi 4 décembre 2006 Statut Membre Dernière intervention 11 janvier 2013
2 juin 2010 à 02:35
slt,

Bon, nous sommes le 2 Juin, il est 2h30 du mat, je te donne une requête, je sais pas si tu en as encore besoin...

declare @table table (id int)
declare @tableOK table (id int)
insert into @table
select distinct id from (
SELECT ROW_NUMBER() OVER(PARTITION BY id  ORDER BY Secteur DESC) AS 'sNumber' , 
       id
FROM newbie) as R where R.sNumber=3

DECLARE tnames_cursor CURSOR
FOR
  select id from @table 
OPEN tnames_cursor
DECLARE @id sysname
FETCH NEXT FROM tnames_cursor INTO @id
WHILE (@@FETCH_STATUS <> -1)
BEGIN
-------------------
insert into @tableOK
select id from newbie where id = @id and Secteur=2 and deb > (select max(fin) from newbie where id=@id and Secteur=3)

-------------------
FETCH NEXT FROM tnames_cursor INTO @id
END
CLOSE tnames_cursor
DEALLOCATE tnames_cursor

select * from newbie where id in (select id from @tableOK)



Sa fonctionne, il faudra surement l'optimiser, mais pas ce soir...lol

Qui ne tente rien, n'a rien
0
cs_Tolliap Messages postés 60 Date d'inscription lundi 4 décembre 2006 Statut Membre Dernière intervention 11 janvier 2013
2 juin 2010 à 07:50
Re,
Aprés plusieurs recherche, j'ai trouvé mieux car le tous en 1 requete :
select * from newbie where id in (
select 
    n.id 
    from newbie as n 
    where n.id in (
        select distinct id from 
        (SELECT ROW_NUMBER() OVER(PARTITION BY id  ORDER BY Secteur DESC) AS 'sNumber' , id FROM newbie) as R 
        where R.sNumber=3)
    and deb>(select max(fin) from newbie where id = n.id))


Voila :)
a+
Qui ne tente rien, n'a rien
0
Rejoignez-nous