Re: Consulta

From: Guillermo Schulman <gschulman_ml(at)yahoo(dot)com(dot)ar>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Consulta
Date: 2004-07-01 14:14:37
Message-ID: 20040701141437.20128.qmail@web21429.mail.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Creo que una opción podría ser crear una tabla
temporal/local donde copias todo el contenido de la
tabla original pero con un campo más "autonumérico",
es decir, generado por una sequence:

CREATE TEMPORARY SEQUENCE mi_seq ....;

CREATE TEMPORARY TABLE temp_tbllines AS (SELECT *,
next_val('mi_seq') as recnum_sucesivo FROM tbllines);

Las tablas temporales son locales a la conexión en que
se encuentran y dejan de existir en el momento en que
la conexión se cierra.
Nuevamente, si necesitas ayuda avisame.

Benjamin Roberto Alvarado Rivera wrote:

Hola, muchas gracias, si funciona!!!.

Efectivamente, me devuelve las tuplas consecutivas que
no tengan el
mismo locationsource.

Pero!!!, no son del todo consecutivos los registros!,
al insertarse el
valor de recnum se incrementa solo, como ya lo había
dicho.

El problema es, que son varias personas las que
captura estos datos y no
es la misma área (otro registro llamado gridnum), por
lo que los
registros para un determinada área quedan con huecos
en la numeración,
es decir si un recnum tiene 23 el siguiente de la
misma área, puede no
tener 24, si no algo como 35 (dependiendo cuanto se
tardo en capturar el
sig registro).

Por ejemplo.

SELECT recnum, upnodeid, downnodeid, locationsource,
gridnum from
sewerarcspass1 where gridnum='010265' order by recnum;

recnum | upnodeid | downnodeid |
locationsource | gridnum
--------+----------------+------------------+----------------+---------
825 | 9 | 10 |
9487 | 010265
826 | 10 | 11 |
9487 | 010265
827 | 11 | 12 |
9487 | 010265
837 | 21 | 23 |
3672 | 010265
839 | 23 | 24 |
3672 | 010265
849 | 31 | 32 |
9093 | 010265
850 | 32 | 33 |
9093 | 010265
851 | 33 | 34 |
9093 | 010265
852 | 34 | 35 |
9093 | 010265
853 | 35 | 36 |
9093 | 010265
854 | 36 | 37 |
9093 | 010265
859 | 43 | 44 |
17050 | 010265
867 | 48 | 49 |
11484 | 010265

como puedes ver los últimos números se salta de 854 a
859 y aquí hay un
cambio de locationsource. y de ahí el siguiente tiene
también diferente
locationsource y su numero es 867.

Se me estaba ocurriendo que en ves de utilizar este
recnum utilizar
algún campo calculado donde al ordenarlo por recnum
empiece desde 1
hasta n tuplas, pero no encuentro tampoco como hacer
esto

seria algo como esto

SELECT CAMPOCALCULADO, recnum, upstreamnodeid,
downstreamnodeid,
locationsource, gridnum from sewerarcspass1 where
gridnum='010265' order
by recnum;

donde CAMPOCALCULADO, empezaría desde 1 hasta el total
de registros
incrementando en 1 en cada registro (1,2,3,...,n)

Teniendo esto, para la consulta que me pasastes,
podría utilizar este
CAMPOCALCULADO, en ves de recnum y así no omitiría
algún registro.

pero no encuentro como hacer esto? alguien tiene un
idea y seria tan
amable de mostrarme como?

Muchas gracias nuevamente!!!

On Wed, 2004-06-30 at 16:26, Guillermo Schulman wrote:

(este mail no es un reply directo del mail que
responde porque estoy teniendo algunos problemas con
mi cliente de mail)

Si no entiendo mal, la idea es encontrar aquellos
registros consecutivos que no tengan el mismo
locationsource.
Supongo que este query te solucionaría el problema:

select t2.* from tbllines t1, tbllines t2 where
t1.recnum=t2.recnum+1 and t1.locationsource <>
t2.locationsource
UNION
select t2.* from tbllines t1, tbllines t2 where
t1.recnum+1=t2.recnum and t1.locationsource <>
t2.locationsource;

La segunda parte podés solucionarla usando el mismo
concepto.
Si necesitas ayuda avisame.

Benjamin Roberto Alvarado Rivera wrote:

Buenas tardes,

Tengo una duda, pero es un off-topic, aun que se trata
de una consulta.
en fin, lo siento.

Tengo unas tablas como estas

tabla de nodos
tblnodos (recnum numeric, NodeId numeric, ... )

tabla de lineas
tbllines ( recnum numeric, upNodeID numeric,
downNodeID, ... ,
LocationSource numeric, ... )

donde:
upNodeID y downNodeID de tbllines, que forman los
nodos de una tubería
de drenaje, estarían relacionados con nodeID de
tblnodos.
LocationSource es el numero de plano y
recnum es un numero auto-incrementado por una
secuencia, generado en
cada ingreso del registro.

Es posible por medio de SQL hacer una consulta a la
tabla tbllines, que
tendría datos como estos:

recnum up down locationsource
1 1 2 1000
2 2 3 1000
. . . .
. . . .
. . . .
50 38 40 1000
51 40 41 2000
52 42 43 2000
. . . .
. . . .
. . . .
79 124 125 2000
80 125 126 5500
. . . .
. . . .
. . . .
110 267 268 5500
111 269 270 6700
. . . .
. . . .
. . . .

y ordenarlos por recnum y obtener solo las tuplas
donde hay cambios de
locationsource, es decir que de la tabla anterior solo
me de

recnum up down locationsource
50 38 40 1000
51 40 41 2000
79 124 125 2000
80 125 126 5500
110 267 268 5500
111 269 270 6700

que son las tuplas donde hubo cambio de
locationsource.

y otra duda, que se basa en el mismo problema, seria
solo seleccionar
aquellas tuplas que tiene cambios de locationsource y
el nodo
downNodeId es igual a UpNodeID de la siguiente tupla.
con lo que solo
tendria como resultado

recnum up down locationsource
50 38 40 1000
51 40 41 2000
79 124 125 2000
80 125 126 5500

las ultimas dos tuplas,con recnum 110 y 111, no las
seleccionaría por
que no tiene nodeID en común.

Es posible hacer esto por medio de SQL, por que lo
estoy haciendo por
medio de programación, recorriendo el resultado de una
consulta y donde
encuentre las diferencias y usa esos datos

Pero, no se si es posible? hacer directamente esto,
desde SQL, que me
facilitaría mas algunas cosas.

Muchas gracias por su tensión.

Benjamin Alvarado

---------------------------(end of
broadcast)---------------------------
TIP 1: para suscribirte y desuscribirte, escribe a
majordomo(at)postgresql(dot)org

------------
Internet gratis ¡y que funciona!
Tres nuevas ciudades con números locales:
Escobar, Zárate y Campana
Yahoo! Conexión
http://ar.online.yahoo.com
¿Qué esperas para navegar bien y a bajo costo?

---------------------------(end of
broadcast)---------------------------
TIP 5: ¿Has leído nuestro extenso FAQ?


http://www.postgresql.org/docs/faqs/FAQ.html

------------
Internet gratis ¡y que funciona!
Tres nuevas ciudades con números locales:
Escobar, Zárate y Campana
Yahoo! Conexión
http://ar.online.yahoo.com
¿Qué esperas para navegar bien y a bajo costo?

Responses

  • Re: Consulta at 2004-07-02 14:05:16 from Benjamin Roberto Alvarado Rivera

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Mario Soto 2004-07-01 14:17:29 Re: Un saludo a toda la gente de la lista y primera duda
Previous Message rrodriguez+tumisolutions.com 2004-07-01 13:57:43 Re: Select con horas