[Réglé] [SQL] [ORACLE] Tri / regroupement "cyclique" ?

Tri / regroupement "cyclique" ? [Réglé] [SQL] [ORACLE] - SQL/NoSQL - Programmation

Marsh Posté le 23-03-2015 à 19:42:12    

Bonjour,
 
Je cherche à faire un truc particulier via un select en (PL/)SQL.
 
Soit la table suivante  avec un jeu de test à la con.
ID est unique.
 

ID | TYPE
-----------
1  | A
2  | A
3  | B
4  | C
5  | C
6  | C
7  | C


 
 
Je cherche à avoir ce résultat :
 

ID | TYPE | LOT
1  | A    | 1
3  | B    | 1
4  | C    | 1
 
2  | A    | 2
5  | C    | 2
 
 
5  | C    | 3
6  | C    | 4
7  | C    | 5


 
En gros je veux faire des blocs (lots) où chaque bloc ne contient qu'un seul type.
 
Une idée ? Via rank over / Partition by ?
 
:jap:


Message édité par flo'r le 02-04-2015 à 15:08:19

---------------
Topic de vente M42 / Contax Yashica / Minolta / Whatever <-- click here !
Reply

Marsh Posté le 23-03-2015 à 19:42:12   

Reply

Marsh Posté le 23-03-2015 à 21:18:15    

Salut
 
Ouaip exactement ca.
Un truc genre:

SELECT id, type, RANK() OVER(PARTITION BY type ORDER BY id) lot
FROM table
ORDER BY 3,1


---------------
C'était vraiment très intéressant.
Reply

Marsh Posté le 23-03-2015 à 21:31:01    

Reply

Marsh Posté le 24-03-2015 à 12:13:28    

Autre difficulté :
 
- je souhaite limiter le nombre de ligne par lot d'une valeur arbitraire Nmax.
Donc un lot = type est unique et nombre de lignes <= Nmax
 
Là je suis perdu...
 
Exemple de résultat attendu pour Nmax = 2 :

ID | TYPE | LOT  
---------------
1  | A    | 1  
3  | B    | 1  
 
2  | A    | 2  
4  | C    | 2  
 
5  | C    | 3  
 
6  | C    | 4  
 
7  | C    | 5


 
Une idée ?
 


---------------
Topic de vente M42 / Contax Yashica / Minolta / Whatever <-- click here !
Reply

Marsh Posté le 26-03-2015 à 18:31:52    

Un truc dans le genre:

SELECT id, type, lot
FROM (
  SELECT id, type, lot, RANK() OVER(PARTITION BY lot ORDER BY type) AS nbInLot
  FROM (
    SELECT id, type, RANK() OVER(PARTITION BY type ORDER BY id) AS lot
    FROM table
    ORDER BY 3,1
  )
)
WHERE nbInLot <= 2


---------------
C'était vraiment très intéressant.
Reply

Marsh Posté le 02-04-2015 à 15:08:03    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed