Select con numero di pagina

di il
3 risposte

Select con numero di pagina

Qualche anima pia mi da una mano con una select?
devo estrarre dei record da una tabella in ordine decrescente, ma mi servono in gruppi di 3, crescenti,
in pratica il risultato dovrebbe essere qualcosa del tipo:

ID | NUMERO PAGINA
50 | 1
48 |1
43 |1
40 |2
37 |2
33 |2
30 |3
28 |3
25 |3
22 |4
16 |4
12 !4

E cosi via, insomma 3 record per ogni "pagina"

la query a cui sono arrivato per ora è:

SET @ROW_NUMBER = 1;
SET @i=0;
SELECT
@ROW_NUMBER:=
CASE
when @i<=3 then @ROW_NUMBER:=@row_number
else
@ROW_NUMBER:=@ROW_NUMBER+1
END AS p,
@i:= case
when @i>3 then @ii:=1
else @i:=@i+1
END,


id

FROM
storico
ORDER BY id DESC

cosi facendo ottengo i record divisi per 3 ma con il numero di pagine invertite,qualche idea per "girare" l ordine del numero di pagina?

3 Risposte

  • Re: Select con numero di pagina

    Senza usare variabili, utilizza una RANK() come funzione finestra sulla pagina e poi filtri per RANK <= 3
    Ad esempio [CODE] SELECT T.Id, T.NumeroPagina FROM (SELECT Id, NumeroPagina, RANK() OVER (Partition By NumeroPagina, Order By ID desc) as 'Rank' FROM storico) As T WHERE T.Rank <= 3 Order By ID Parti a studiare da questo link
  • Re: Select con numero di pagina

    Ti ringrazio per la risposta e la dritta, ma non riesco a capire, mi manca qualcosa mi sa.
    Ho guardato anche il tuo link e cercato qualche esempio ma onestamente mi sa mi manca qualche pezzo .

    Comunque io il campo numeropagina nella tabella non lo ho, è proprio quel campo che devo riuscire a calcolare.
    in pratica ho solamente il campo ID nella tabella.

    Ho risolto cosi:
    CREATE TEMPORARY TABLE tmp SELECT ID FROM storico ORDER BY id desc;
    
    SET @ROW_NUMBER = 1;
    SET @i=0;
    SELECT 
    	@ROW_NUMBER:=	
    	CASE	
    	    when @i<=2 then @ROW_NUMBER:=@row_number
    	else
    	@ROW_NUMBER:=@ROW_NUMBER+1
    	END AS p,	
    	@i:= case
    		when @i>2 then @i:=1
    		else
    		@i:=@i+1
    		
    	END,
        id 
    FROM
        tmp;
       DROP TABLE tmp;

    certo non è che mi piaccia molto come soluzione ma col rank non riesco proprio ad uscirne...
  • Re: Select con numero di pagina

    Ah no, non ne esci. Io avevo inteso che la paginazione tu l'avessi già ma che comprendesse più di tre righe e a te servissero solo per prime tre per ogni pagina.
    Per le mie conoscenze, io penserei ad una UDF che ritorni una tabella. Tiro fuori tutti i record in un cursore, eseguo il fetch delle righe ed ogni 3 incrementerei la pagina.

    Un lavoro non molto dissimile dal tuo.
Devi accedere o registrarti per scrivere nel forum
3 risposte