Re: numerar con correlativo desde 1 a n a resultado de consulta

From: Jairo Graterón <jgrateron(at)gmail(dot)com>
To: "jvenegasperu (dot)" <jvenegasperu(at)gmail(dot)com>
Cc: Ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: numerar con correlativo desde 1 a n a resultado de consulta
Date: 2014-04-16 19:32:46
Message-ID: CALnU-rP4TUuO+NV9ByF_Zij3oPEjzwjMvv7uSZmdO5hnOiVfsw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola no he trabajado con gis pero este ejemplo te podría ayudar.

create table manzana(
sector varchar(4),
mz varchar(3),
primary key (sector,mz)
);

insert into manzana(sector,mz) values
('0901','mz1'),('0901','mz2'),('0901','mz3'),
('0902','mz1'),('0902','mz2'),('0902','mz3'),
('0903','mz1'),('0903','mz2'),('0903','mz3'),
('0904','mz1'),('0904','mz2'),('0904','mz3');

with t1 as (
select sector, row_number() OVER(order by sector) from manzana group by
sector )
select * from manzana left join t1 using(sector)
order by sector,mz

El 16 de abril de 2014, 14:09, jvenegasperu . <jvenegasperu(at)gmail(dot)com>escribió:

> Hola Guillermo
>
> probe la consulta y efectivamente numera el problema es qu lo que quiero
> numerar es cada cambio del campo sector no el correlativo tengo esto
>
> la consulta me devuelve esto:
>
> 0901 mz1 1
> 0901 mz2 2
> 0901 mz3 3
>
> 0902 mz1 1
> 0902 mz2 2
> 0902 mz3 3
>
> 0903 mz1 1
> 0903 mz2 2
> 0903 mz3 3
>
> 0904 mz1 1
> 0904 mz2 2
> 0904 mz3 3
>
> lo que yo necesito es esto
>
>
> 0901 mz1 1
> 0901 mz2 1
> 0901 mz3 1
>
> 0902 mz1 2
> 0902 mz2 2
> 0902 mz3 2
>
> 0903 mz1 3
> 0903 mz2 3
> 0903 mz3 3
>
> 0904 mz1 4
> 0904 mz2 4
> 0904 mz3 4
>
> es el tipo de numeración que necesito pero para el resultado de una
> consulta cualquiera.
>
> al resultado de la consulta decirle por ejemplo numerar por el campo
> sector y le vaya poniendo el mismo numero como la segunda lista el
> resultado estaria ordenado previamente.
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> El 16 de abril de 2014, 12:44, Guillermo E. Villanueva <
> guillermovil(at)gmail(dot)com> escribió:
>
>> Ok, probá lo siguiente:
>>
>> SELECT sector, mz, row_number() OVER (PARTITION BY sector) FROM tabla;
>>
>> Guillermo Villanueva
>>
>> El 15 de abril de 2014, 10:47, jvenegasperu . <jvenegasperu(at)gmail(dot)com>escribió:
>>
>> Guillermo buenos dias
>>>
>>> tienes razon el ultimo registro deberia decir 3 por el cambio de sector
>>> estoy revisando la funcion window solo estoy logrando numerar
>>> correlativamente y lo que necesito es colocar el numero por cada cambio de
>>> sector
>>>
>>> sector mz numero
>>> 0901 mz1 1
>>> 0901 mz2 1
>>> 0901 mz3 1
>>>
>>> 0902 mz1 2
>>> 0902 mz2 2
>>> 0903 mz3 3
>>>
>>>
>>>
>>> El 15 de abril de 2014, 7:27, Guillermo E. Villanueva <
>>> guillermovil(at)gmail(dot)com> escribió:
>>>
>>> José buen día, no manejo nada de gis pero solo comento: tu ejemplo creo
>>>> que tiene un error no? el último registro tiene cambio de sector y el
>>>> número sigue siendo 2.
>>>> En caso de que así sea, esto es lo que estás necesitando:
>>>> http://www.postgresql.org/docs/9.1/static/tutorial-window.html
>>>> Saludos
>>>>
>>>> Guillermo Villanueva
>>>>
>>>>
>>>>
>>>> El 13 de abril de 2014, 1:01, jvenegasperu . <jvenegasperu(at)gmail(dot)com>escribió:
>>>>
>>>> Estimado Victor
>>>>>
>>>>> gracias por tu interes si entiendo tu consulta localizas un area
>>>>> geografica por el perimetro lo cual esta muy bueno sin embargo respecto a
>>>>> lo siguiente:
>>>>>
>>>>>
>>>>> >pero veo que estas usando un conjuntos de campos alfanuméricos
>>>>> (nomenclatura catastral) para determinar un lugar geográfico, y ademas
>>>>> >tenes un campo verdaderamente geográfico. El problema con esto es que
>>>>> dependes de que quien manipule los datos, lo hiciera siempre >estrictamente
>>>>> bien. Si por ejemplo alguien se equivoca y pone 0901 en lugar de poner 0902
>>>>> cuando imprimas el pdf del numero 1 tendrias >agregado algo que esta solo y
>>>>> lejos como si fuera una isla, un polígono posiblemente asilado del resto, y
>>>>> cuando imprimas el 2 tendrias un >hueco.
>>>>>
>>>>> tienes toda la razon podria tener una isla o un hueco en la
>>>>> cartografia mi caso funciona asi el usuario por ejemplo dibuja un area
>>>>> geografica con quantum gis. yo simplemente he puesto un trigger dentro de
>>>>> la base de datos para que automaticamente por ejemplo un conjunto de
>>>>> manzanas se codifiquen para pertenecer al sector que dibujo el usuario de
>>>>> esa forma se evita la isla o el hueco en la cartografia porque la
>>>>> codificacion se hace en funcion a las geometrias afectadas.
>>>>>
>>>>> Con lo cual se logra como dices que esten estrictamente bien
>>>>> codificadas,de hecho se puede realizar la mayoria de operaciones desde el
>>>>> lado espacial sin embargo la información de mi sistema debo migrarla
>>>>> tambien a un sistema oracle que necesita alguna forma de identificación
>>>>> para corresponder con la parte espacial por eso agrego la codificacion de
>>>>> esa forma.
>>>>>
>>>>> Ahora Quantum Gis es capaz de generar los planos a manera de atlas de
>>>>> manera automatica por esa razon si se puede lograr la numeración que
>>>>> mencione los planos se obtendrian con un par de clics sin preocuparse por
>>>>> el encuadre o centrado porque eso se hace automatico ya lo he probado
>>>>> varias veces de hecho cuando necesito planos de diferentes lugares yo lleno
>>>>> la numeración manualmente y listo.
>>>>>
>>>>> Comentarte por ejemplo que tener el plano de los 800 grupos
>>>>> poblacionales que tiene la ciudad para un tematico x se puede tener listos
>>>>> en unos 3 a 5 minutos y yo creo que un computador mas potente podria ser
>>>>> hasta menos tiempo.
>>>>>
>>>>> claro sin contar que previamente yo hago la numeración que explique
>>>>> inicialmente la cual me toma aproximadamente unos 30 minutos de trabajo
>>>>> realizando los scripts para numerar manualmente directamente en el pgadmin.
>>>>>
>>>>> por esa razon estoy interesado en poder armar esta función que numere
>>>>> cada cambio de un campo de una consulta dada.
>>>>>
>>>>> ya que tengo un sistema en web para consultar tambien.
>>>>>
>>>>> pensaba armar una especie almacen de consultas que el usuario
>>>>> realiza.en la parte web y poner una opcion que diga preparar planos, cuando
>>>>> le de clic a esa opcion el sistema realizaria la numeracion interna para
>>>>> esa consulta que armo el usuario y luego desde quantum gis tendria sus
>>>>> planos listos en una pasada.
>>>>>
>>>>> esa es mi idea Victor espero podamos seguir comentando estos temas ya
>>>>> que no he tenido mucho contacto con desarrolladores en postgis
>>>>>
>>>>> saludos a todos y espero no los estemos aburriendo con tanta
>>>>> verborragia
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> El 12 de abril de 2014, 11:25, Victor Hugo Roumieu <vhr273(at)gmail(dot)com>escribió:
>>>>>
>>>>> Hola gentes del foro. Estimado Jose, no se si te comprendo y si te
>>>>>> puedo ayudar, pero veo que estas usando un conjuntos de campos
>>>>>> alfanuméricos (nomenclatura catastral) para determinar un lugar geográfico,
>>>>>> y ademas tenes un campo verdaderamente geográfico. El problema con esto es
>>>>>> que dependes de que quien manipule los datos, lo hiciera siempre
>>>>>> estrictamente bien. Si por ejemplo alguien se equivoca y pone 0901 en lugar
>>>>>> de poner 0902 cuando imprimas el pdf del numero 1 tendrias agregado algo
>>>>>> que esta solo y lejos como si fuera una isla, un polígono posiblemente
>>>>>> asilado del resto, y cuando imprimas el 2 tendrias un hueco.
>>>>>>
>>>>>> Siendo asi en tu caso bien podrias hacer vistas basandote unicamente
>>>>>> en el dato espacial, para ello debieras primer hacerte una tabla con los
>>>>>> sectores que quieres graficar, deberian tener los poligonos que marcan el
>>>>>> perímetro de la zonas, por ejemplo localidades, barrios, sectores, chacras,
>>>>>> quintas, etc. Luego en la vista haces un join entre las dos tablas con las
>>>>>> generosas funciones que postgis te da para sql.
>>>>>>
>>>>>> Un caso de mi base real que es similar creo q lo tuyo es el siguiente:
>>>>>>
>>>>>> create view aux.mapa1_de_calles as
>>>>>> select trim(cllagr.nombre) as nombre, max(cllagr.gid) as gid,
>>>>>> st_union( cllagr.cll )::geometry as cll_geom
>>>>>> from (select ncl.*,st_intersection( ncl.the_geom,ctstro.mapa_tematico_perimetro(
>>>>>> 7 )) as cll
>>>>>> from gis.nomencladorcalles ncl
>>>>>> where ncl.the_geom&&ST_buffer(ctstro.mapa_tematico_perimetro(
>>>>>> 7 ),1) and (ncl.nombre is not null)
>>>>>> order by ST_PointN(the_geom,1) desc) as cllagr
>>>>>> group by 1;
>>>>>>
>>>>>> Donde ctstro.mapa_tematico_perimetro( 7 ) es un pl-sql que me
>>>>>> retorna un perímetro.
>>>>>> Obvio podrias hacer que el sector 7 fuera un parametro, o hacer un
>>>>>> procedimiento o materializar la vista, etc. infinitas posibilidades
>>>>>>
>>>>>> Finalmente como informático viejo que piensa en modo relacional,
>>>>>> (deformación profesional) arranco a arreglar las cosas con sql.
>>>>>> Es posible por ello esto no te sirva, pero prefiero usar las muchas
>>>>>> funciones que te dan los cartuchos espaciales de los motores grandes
>>>>>> (postgres-orcale-db2) para resolver lo mas posible, antes de que entre en
>>>>>> las herramientas finales com qgis, geoserver, gv-gis etc, ya que sino, no
>>>>>> hay diferencia entre usar un terrible motor como postgres-postgis, con un
>>>>>> simple sahpe (dbf)
>>>>>>
>>>>>> Saludos
>>>>>> vhr
>>>>>>
>>>>>> -
>>>>>> Enviado a la lista de correo pgsql-es-ayuda (
>>>>>> pgsql-es-ayuda(at)postgresql(dot)org)
>>>>>> Para cambiar tu suscripción:
>>>>>> http://www.postgresql.org/mailpref/pgsql-es-ayuda
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> José Mercedes Venegas Acevedo
>>>>> cel: Mov. 949808846
>>>>>
>>>>> mails: jvenegasperu(at)php(dot)net
>>>>> jvenegasperu(at)gmail(dot)com
>>>>>
>>>>> PHP Spanish Docs translator member.
>>>>> http://www.php.net/manual/es/index.php
>>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> José Mercedes Venegas Acevedo
>>> cel: Mov. 949808846
>>>
>>> mails: jvenegasperu(at)php(dot)net
>>> jvenegasperu(at)gmail(dot)com
>>>
>>> PHP Spanish Docs translator member.
>>> http://www.php.net/manual/es/index.php
>>>
>>
>>
>
>
> --
> José Mercedes Venegas Acevedo
> cel: Mov. 949808846
>
> mails: jvenegasperu(at)php(dot)net
> jvenegasperu(at)gmail(dot)com
>
> PHP Spanish Docs translator member.
> http://www.php.net/manual/es/index.php
>

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Milton Labanda 2014-04-17 19:29:00 Replicacion de Bases de Datos
Previous Message jvenegasperu . 2014-04-16 18:39:18 Re: numerar con correlativo desde 1 a n a resultado de consulta