PostgreSQL - Ancestros

 
Vista:
sin imagen de perfil
Val: 9
Ha disminuido su posición en 3 puestos en PostgreSQL (en relación al último mes)
Gráfica de PostgreSQL

Ancestros

Publicado por Fernando (5 intervenciones) el 11/12/2018 11:17:58
Buenos días
Tengo una tabla que representa una seria de poligonos.
Estos poligonos pueden estar dividisos o no en otros más pequeños, para ello dentro de cada poligono hay un campo de marca su ID dentro del poligono y otro campo que representa sus ancestros
Lo que me gustaría es quitar todos los registros que tienen ancestros, es decir dejar solo los poligonos individuales sin ninguno que haga de contenedor.
Llevo una semana dandole vueltas y no se me ocurre como, gracias

Dejo un pequeño ejemplo de lo que seria la tabla
https://rextester.com/live/LBZG75536

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de joel
Val: 31
Ha mantenido su posición en PostgreSQL (en relación al último mes)
Gráfica de PostgreSQL

Ancestros

Publicado por joel (10 intervenciones) el 11/12/2018 15:15:23
Hola Fernando, no soy muy experto, pero seria realizar una consulta que el campo inter_ancestros sea null, no?

1
SELECT * from parcelas WHERE inter_ancestros IS NULL

Es esto?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 9
Ha disminuido su posición en 3 puestos en PostgreSQL (en relación al último mes)
Gráfica de PostgreSQL

Ancestros

Publicado por Fernando (5 intervenciones) el 11/12/2018 16:04:40
En primer lugar gracias por la respuesta, pero no, con tu consulta se descartarian las parcelas que no tienen "hijos" es decir las parcelas que no se encuentran divididas en otras, para el ejemplo que he puesto el resultado serian las filas 2,5,6,7 y 8

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de joel
Val: 31
Ha mantenido su posición en PostgreSQL (en relación al último mes)
Gráfica de PostgreSQL

Ancestros

Publicado por joel (10 intervenciones) el 11/12/2018 19:54:04
Hola fernando, no me queda claro...
De tu código:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CREATE TABLE parcelas
(    parcela            CHARACTER VARYING(50) NOT NULL ,
    inter_id              smallint NOT NULL ,
    inter_ancestros           CHARACTER VARYING(50) NULL
);
INSERT INTO parcelas VALUES
	('a',1,NULL),
	('a',2,'1'),
	('b',1,NULL),
	('b',2,'1'),
	('b',3,'1,2'),
	('b',4,'1,2'),
	('b',5,'1'),
	('c',1,NULL);
 
SELECT * FROM parcelas

Según comentas el resultado que esperas es el 2,5,6,7 y 8??
('a',2,'1'), ('b',3,'1,2'), ('b',4,'1,2'),('b',5,'1'),('c',1,NULL)

Pero excepto el 8 el resto tiene ancestros, no?

Nos puedes comentar con mas detalle?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 9
Ha disminuido su posición en 3 puestos en PostgreSQL (en relación al último mes)
Gráfica de PostgreSQL

Ancestros

Publicado por Fernando (5 intervenciones) el 12/12/2018 09:22:32
Gracias por el interes
Vale he puesto una nueva columna con el porcentaje de superficie de cada parcela para ver si se entiende mejor, y me acabo de dar cuenta que en el primer post me he liado, yo lo que quiero quitar es todos los poligonos que tengan DESCENCIENTES de forma que el resultado de la consulta al agruparlo por nombre de parcela no me pueda dar una superficie mayor al 100%

https://rextester.com/live/LBZG75536

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de joel
Val: 31
Ha mantenido su posición en PostgreSQL (en relación al último mes)
Gráfica de PostgreSQL

Ancestros

Publicado por joel (10 intervenciones) el 12/12/2018 14:06:13
Hola Fernando, estaría bien que publicaras tu código aquí, es mas sencillo para poder ayudar...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
CREATE TABLE parcelas
(    parcela            CHARACTER VARYING(50) NOT NULL ,
    inter_id              smallint NOT NULL ,
    inter_ancestros           CHARACTER VARYING(50) NULL,
    superficie_porcentaje integer
);
INSERT INTO parcelas VALUES
	('a',1,NULL,100),
	('a',2,'1',100),
	('b',1,NULL,100),
	('b',2,'1',50),
	('b',3,'1,2',25),
	('b',4,'1,2',25),
	('b',5,'1',50),
	('c',1,NULL,100);
 
SELECT * FROM parcelas;
 
SELECT parcela, sum(superficie_porcentaje)
FROM parcelas
GROUP BY parcela;

Creo que cada vez entiendo menos lo que quieres conseguir...
De esa lista de parcelas, exactamente que valores quieres que te devuelva?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 9
Ha disminuido su posición en 3 puestos en PostgreSQL (en relación al último mes)
Gráfica de PostgreSQL

Ancestros

Publicado por Fernando (5 intervenciones) el 12/12/2018 15:23:44
Vale, empiezo desde el principio
Tengo una tabla en la que cada registro representa una parcela, a su vez una parcela puede estar dividida en otras parcelas más pequeñas, cada registro tiene los siguientes campos:
-Nombre de la parcela: corresponde al campo parcela
-Identificador dentro de la parcela: corresponde al campo inter_id. Aqui por ejemplo nos imaginamos que es una parcela que esta dividida en dos, pues tendriamos 3 registros para esta parcela, el primer registro en inter_id toma el valor 1, el segundo registro (que se corresponde a una de las dos partes de la parcela) toma el valor 2 y el tercer registro (que se corresponde con la segunda parte de la parcela) toma el valor 3
-Identificador del ancestro: corresponde al campo inter_ancestros. Indica el valor del inter_id del ancestro del que provienen. Sigo con el ejemplo de la parcela que esta dividida en dos, el primer registro de la parcela vendrá como NULL (no pertenece a ninguna parcela), el segundo y tercer registros de la parcela tendrán el valor de 1.
- Superficie: campo superfcie_porcentaje. Valor de la superficie de cada registro con respecto al valor de la superficie total de la parcela. Siguiendo con el ejemplo, el primer registro tiene un valor del 100% y las otras dos pues una superficie que al sumarla de claro el 100%.

No se si así queda más claro
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 9
Ha disminuido su posición en 3 puestos en PostgreSQL (en relación al último mes)
Gráfica de PostgreSQL

Ancestros

Publicado por Fernando (5 intervenciones) el 14/12/2018 20:20:32
Sigo con mi rollo,
https://rextester.com/live/LBZG75536
Al final pongo una consulta que hace justamente lo que necesito pero no se como hacer para que digamos el campo correcpondiente a "parcela" no tener que ir rellenandolo de modo manual
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar