[QGIS-it-user] SQLite: inserire numeri sequenziali per gruppi di valori

Ciao a tutti,
sto cercando di risolvere un problema che all’apparenza è molto semplice, ma non ne sto venedo fuori.

Ho una tabella con un campo [cod], il quale riporta un codice che può ripetersi.
Voglio differenziare tutti i record che hanno il medesimo valore in [cod], inserendo un numero sequenziale nel campo [cod_seq].
Il risultato atteso è tipo questo:

[cod] [cod_seq]
029.151 1
122.756 1

122.756 2

122.756 3

122.756 4

704.001 1

704.001 2

599.864 1
354.365 1

354.365 2

009.975 1

747.301 1

​Una sorta di autoincremetale per gruppi.​

​Come posso calcolare il ​campo [cod_seq] in base ai valori presenti in [cod]?
Vorrei arrivare al risultato tramite una sql in sqlite, ma senza successo fin’ora.

Saluti e grazie!
Daniele

Ciao Daniele,
in PostgreSQL sarebbe facile con le funzioni finestra.
Non ho sqlite sotto mano adesso, ma forse una cosa così potrebbe funzionare:

SELECT cod, (SELECT count(*) FROM tabella b WHERE a.cod = b.cod AND a.ROWID >= b.ROWID) FROM tabella a

giovanni

···

Il 8 nov 2017 15:52, “Daniele Bonaposta” <daniele.bonaposta@gmail.com> ha scritto:

Ciao a tutti,
sto cercando di risolvere un problema che all’apparenza è molto semplice, ma non ne sto venedo fuori.

Ho una tabella con un campo [cod], il quale riporta un codice che può ripetersi.
Voglio differenziare tutti i record che hanno il medesimo valore in [cod], inserendo un numero sequenziale nel campo [cod_seq].
Il risultato atteso è tipo questo:

[cod] [cod_seq]
029.151 1
122.756 1

122.756 2

122.756 3

122.756 4

704.001 1

704.001 2

599.864 1
354.365 1

354.365 2

009.975 1

747.301 1

​Una sorta di autoincremetale per gruppi.​

​Come posso calcolare il ​campo [cod_seq] in base ai valori presenti in [cod]?
Vorrei arrivare al risultato tramite una sql in sqlite, ma senza successo fin’ora.

Saluti e grazie!
Daniele


QGIS-it-user mailing list
QGIS-it-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/qgis-it-user

Appena testato e confermo che funziona.

SELECT cod, (SELECT count(*) FROM tabella b WHERE a.cod = b.cod AND a.ROWID >= b.ROWID) AS cod_seq FROM tabella a

Se puoi conferma pure te :slight_smile:
giovanni

···

Il giorno 8 novembre 2017 16:06, G. Allegri <giohappy@gmail.com> ha scritto:

Ciao Daniele,
in PostgreSQL sarebbe facile con le funzioni finestra.
Non ho sqlite sotto mano adesso, ma forse una cosa così potrebbe funzionare:

SELECT cod, (SELECT count(*) FROM tabella b WHERE a.cod = b.cod AND a.ROWID >= b.ROWID) FROM tabella a

giovanni

Il 8 nov 2017 15:52, “Daniele Bonaposta” <daniele.bonaposta@gmail.com> ha scritto:

Ciao a tutti,
sto cercando di risolvere un problema che all’apparenza è molto semplice, ma non ne sto venedo fuori.

Ho una tabella con un campo [cod], il quale riporta un codice che può ripetersi.
Voglio differenziare tutti i record che hanno il medesimo valore in [cod], inserendo un numero sequenziale nel campo [cod_seq].
Il risultato atteso è tipo questo:

[cod] [cod_seq]
029.151 1
122.756 1

122.756 2

122.756 3

122.756 4

704.001 1

704.001 2

599.864 1
354.365 1

354.365 2

009.975 1

747.301 1

​Una sorta di autoincremetale per gruppi.​

​Come posso calcolare il ​campo [cod_seq] in base ai valori presenti in [cod]?
Vorrei arrivare al risultato tramite una sql in sqlite, ma senza successo fin’ora.

Saluti e grazie!
Daniele


QGIS-it-user mailing list
QGIS-it-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/qgis-it-user

Confermo: funziona
grande Gio!

grazie!

···

Il giorno 8 novembre 2017 19:20, G. Allegri <giohappy@gmail.com> ha scritto:

Appena testato e confermo che funziona.

SELECT cod, (SELECT count(*) FROM tabella b WHERE a.cod = b.cod AND a.ROWID >= b.ROWID) AS cod_seq FROM tabella a

Se puoi conferma pure te :slight_smile:
giovanni

Il giorno 8 novembre 2017 16:06, G. Allegri <giohappy@gmail.com> ha scritto:

Ciao Daniele,
in PostgreSQL sarebbe facile con le funzioni finestra.
Non ho sqlite sotto mano adesso, ma forse una cosa così potrebbe funzionare:

SELECT cod, (SELECT count(*) FROM tabella b WHERE a.cod = b.cod AND a.ROWID >= b.ROWID) FROM tabella a

giovanni

Il 8 nov 2017 15:52, “Daniele Bonaposta” <daniele.bonaposta@gmail.com> ha scritto:

Ciao a tutti,
sto cercando di risolvere un problema che all’apparenza è molto semplice, ma non ne sto venedo fuori.

Ho una tabella con un campo [cod], il quale riporta un codice che può ripetersi.
Voglio differenziare tutti i record che hanno il medesimo valore in [cod], inserendo un numero sequenziale nel campo [cod_seq].
Il risultato atteso è tipo questo:

[cod] [cod_seq]
029.151 1
122.756 1

122.756 2

122.756 3

122.756 4

704.001 1

704.001 2

599.864 1
354.365 1

354.365 2

009.975 1

747.301 1

​Una sorta di autoincremetale per gruppi.​

​Come posso calcolare il ​campo [cod_seq] in base ai valori presenti in [cod]?
Vorrei arrivare al risultato tramite una sql in sqlite, ma senza successo fin’ora.

Saluti e grazie!
Daniele


QGIS-it-user mailing list
QGIS-it-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/qgis-it-user


Daniele Bonaposta,
Cartografia - G.I.S.

via Don Minzoni 13a
40121 - Bologna
mobile: +39.338.3377044
e-mail: daniele.bonaposta@gmail.com

Linkedin: http://www.linkedin.com/pub/daniele-bonaposta/26/487/872


-----
https://pigrecoinfinito.wordpress.com/
--
Sent from: http://osgeo-org.1560.x6.nabble.com/QGIS-Italian-User-f5250612.html

giohappy wrote

Appena testato e confermo che funziona.

SELECT cod, (SELECT count(*) FROM tabella b WHERE a.cod = b.cod AND
a.ROWID

= b.ROWID) AS cod_seq FROM tabella a

Se puoi conferma pure te :slight_smile:
giovanni

Ciao,
confermo pure io.

ho realizzato un gist qui [0]

[0] https://gist.github.com/pigreco/b8e87cfd0dba5525d2fdb514d2fc71fa

saluti

-----
https://pigrecoinfinito.wordpress.com/
--
Sent from: http://osgeo-org.1560.x6.nabble.com/QGIS-Italian-User-f5250612.html