Re: [pgsql-es-ayuda] Ayuda sobre consulta!!!!

2015-10-22 Por tema Francisco Olarte
Flavio:

2015-10-22 14:58 GMT+02:00 Flavio Roche :
> Les escribo porque tengo la siguiente problemática, tengo una tabla persona
> la cual cuenta con la siguiente estructura
> CREATE TABLE persona
> (
>   pasaporte integer,
>   nombre text,
>   calificacion integer,
>   fecha text,
>   acumula boolean
> )
>
> Y pongo un ejemplo de los datos que tengo almacenados en la misma
>
> pasaportenombre  calificacion fecha
> acumula
>   1 Pepe 4 12/10/2015 
>  t
>   2 Jose  513/10/2015 
>  f
>   1 Pepe 312/11/2015  
> t
>   3 Ramon 5 14/10/2015
>   t
>   2 Jose  313/11/2015 
>  f

> Necesito hacer una funcion que se le pase por parámetro un rango de fecha, y
> calcule la calificación promedio de las personas en ese intervalo de tiempo
> en caso de que el parámetro acumula tenga valor true y en caso que no
> acumule, la última calificación obtenida. Ejemplo de la salida deseada
> al llamar ejecutar la funcion..
> Select * from consulta('01/10/2015','25/11/2015')
>
> 1   Pepe3.5 (acumula)
> 2   Jose 3  (No acumula)
> 3   Ramon 5  (Acumula)

Aqui le veo un problema gordo, tu tabla parece estar desnormalizada y
sin restricciones ( es decir, Jose podria tener pasaportes 2 y 22 , y
pepe podria tener acumula t y f, y Ramon pasaporte y acumula a null.
Esto hace que la funcion sea enormemente compleja. Para reducirlo un
poco te comento sobre una estructura equivalente pero normalizada en
dos tablas, persona ( pasaporte primary key, nombre not null, acumula
not null) y calificaciones ( pasaport foreign key references persona,
calificacion not null, fecha not null).

Otro problema gordo es que metes FECHA como texto, malo, y encima en
DD/MM/, peor ( los que venimos de la epoca de las tarjetas, y
ademas seguimos usando archivos de texto plano, sabemos que las fechas
es mejor guardarlas como numeros de 8 digitos o textos de 8 o 10
caracteres pero con la forma  (A*100+M)*100+D  o  '/MM/DD' para
que el sort natural del campo ordene por fecha automaticamente.
Supondre tambien que puedes corregir eso.

En ese caso con una funcion en cualquier lenguage no es dificil ( no
hay mas que hacer dos select ordenados o con joins y barrer), incluso
con las funciones de ventana creo que se podria hacer en un solo
query.

Para eso usas un truco tipico, que es empezar por calcular las dos
cosas en la tabla de calificaciones, la media es facil,
avg(calificacion*1.0), o avg(calificacion::real) ( otro problema en tu
modelo de datos calificacion es integer pero la media la quieres con
decimales ). el ultimo valor creo que se saca con
last_value(calificacion) over (group by fecha, order by fecha), o algo
asi, no tengo accesible donde probarlo en este momento pero no deberia
ser dificil. Supongamos que tu query es:

select pasaporte,
avg(calificacion::real) as media,
last_value(calificacion::real) over ( group by pasaporte order by
fecha) as ultima
from calificaciones
group by pasaporte

Ya solo tienes que hacer un join con personas para sacar las cosas.
Con un CTE es facil:

with aux as (
select pasaporte,
avg(calificacion::real) as media,
last_value(calificacion::real) over ( group by pasaporte order by
fecha) as ultima
from calificaciones
group by pasaporte
)
select
   per.pasaporte,
   per.name,
   case when per.acumula then media else ultima end,
   case when per.acumule then "(acumula)" else "(No acumula)" end
from aux, personas per
where aux.pasaporte = per.pasaporte
order by pasaporte

Esto seria mas o menos si normalizas las tablas y usas fechas. Si no
puedes hacer algo similar con tu tabla original en varios pasos(
usando CTE o select sobre select sobre select), empieza por
seleccionar un to_date del fecha, para tener los ordenes correctos.
Sobre este resultado haz el equivalente al primer query, pero añade
los valores de nombre y pasaporte ( usa max(nombre), max(pasaporte),
p.e., ya que es un query agregado, sobre este ultimo haz el case para
formatear / seleccionar. Una vez que los tengas todos puedes
simplificarlo a un unico query, pero te saldra complicado.

Francisco Olarte.

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripci�n:
http://www.postgresql.org/mailpref/pgsql-es-ayuda


Re: [pgsql-es-ayuda] Ayuda sobre consulta!!!!

2015-10-22 Por tema Flavio Roche
Saludos a todos los colegas de la comunidad 

Les escribo porque tengo la siguiente problemática, tengo una tabla persona la 
cual cuenta con la siguiente estructura 

Tabla Persona 

CREATE TABLE persona 
( 
pasaporte integer, 
nombre text, 
calificacion integer, 
fecha text, 
acumula boolean 
) 

Y pongo un ejemplo de los datos que tengo almacenados en la misma 

pasaporte nombre calificacion fecha acumula 
1 Pepe 4 12/10/2015 t 
2 Jose 5 13/10/2015 f 
1 Pepe 3 12/11/2015 t 
3 Ramon 5 14/10/2015 t 
2 Jose 3 13/11/2015 f 


Necesito hacer una funcion que se le pase por parámetro un rango de fecha, y 
calcule la calificación promedio de las personas en ese intervalo de tiempo en 
caso de que el parámetro acumula tenga valor true y en caso que no acumule, la 
última calificación obtenida. Ejemplo de la salida deseada al llamar 
ejecutar la funcion.. 

Select * from consulta('01/10/2015','25/11/2015') 

1 Pepe 3.5 (acumula) 
2 Jose 3 (No acumula) 
3 Ramon 5 (Acumula) 

Saludos... 








17 de octubre: Final Cubana 2015 del Concurso de Programación ACM-ICPC.
http://coj.uci.cu/contest/contestview.xhtml?cid=1407



Re: [pgsql-es-ayuda] Ayuda sobre consulta SQL

2015-03-19 Por tema Linder Poclaba Lazaro
Disculpas escribí mal, se quiere saber los que no están en la tabla 2, el
join me saca los que coinciden con la tabla 2

El 19 de marzo de 2015, 12:20, Gilberto Castillo 
gilberto.casti...@etecsa.cu escribió:



  Buenos días lista les escribo esperando me puedan dar algunos tips para
  poder solucionar la siguiente consulta, tengo dos tablas donde tengo
  campos
  de textos
 
  tabla1
  id   nrodocumento
  1   '1.2.3.4.5.6'
  2'2.3.4.5.6.7'
  3   '3.4.5.6.7.8'
  4'6.7.8.9.0.1'
  tabla2
  id   nrodocumento
  1'3.4.5.6.7.8'
  2'0.1.2.3.4.5'
  3'1.2.3.4.5.6'
 
  Se quiere saber que documentos de la tabla 1 están en la tabla 2 con
  consulta sql, o necesariamente tengo que comparar en una funcion plpgsql?

 No tengo idea de lo que realmente quieres hacer, pero con un simple Join o
 usando Union, con ese campo como llave creo que resuelvas.

 Saludos,
 Gilberto Castillo
 La Habana, Cuba

 ---
 This message was processed by Kaspersky Mail Gateway 5.6.28/RELEASE
 running at host imx3.etecsa.cu
 Visit our web-site: http://www.kaspersky.com, http://www.viruslist.com




Re: [pgsql-es-ayuda] Ayuda sobre consulta SQL

2015-03-19 Por tema Guillermo E. Villanueva
Una forma posible
select distinct tabla1.nrodocumento
from tabla1 inner join tabla2 on tabla1.nrodocumento=tabla2.nrodocumento

Guillermo Villanueva
http://ar.linkedin.com/in/guillermovillanueva

El 19 de marzo de 2015, 12:14, Linder Poclaba Lazaro linder...@gmail.com
escribió:

 Buenos días lista les escribo esperando me puedan dar algunos tips para
 poder solucionar la siguiente consulta, tengo dos tablas donde tengo campos
 de textos

 tabla1
 id   nrodocumento
 1   '1.2.3.4.5.6'
 2'2.3.4.5.6.7'
 3   '3.4.5.6.7.8'
 4'6.7.8.9.0.1'
 tabla2
 id   nrodocumento
 1'3.4.5.6.7.8'
 2'0.1.2.3.4.5'
 3'1.2.3.4.5.6'

 Se quiere saber que documentos de la tabla 1 están en la tabla 2 con
 consulta sql, o necesariamente tengo que comparar en una funcion plpgsql?

 Esperando su ayuda los saludo muy atentamente.






Re: [pgsql-es-ayuda] Ayuda sobre consulta SQL

2015-03-19 Por tema Gilberto Castillo


 Disculpas escribí mal, se quiere saber los que no están en la tabla 2, el
 join me saca los que coinciden con la tabla 2

Saca lo que tu pidas, haces la pregunta contraría y listo.

Saludos,
Gilberto Castillo
La Habana, Cuba
--- 
This message was processed by Kaspersky Mail Gateway 5.6.28/RELEASE running at 
host imx3.etecsa.cu
Visit our web-site: http://www.kaspersky.com, http://www.viruslist.com
-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda


[pgsql-es-ayuda] Ayuda sobre consulta SQL

2015-03-19 Por tema Linder Poclaba Lazaro
Buenos días lista les escribo esperando me puedan dar algunos tips para
poder solucionar la siguiente consulta, tengo dos tablas donde tengo campos
de textos

tabla1
id   nrodocumento
1   '1.2.3.4.5.6'
2'2.3.4.5.6.7'
3   '3.4.5.6.7.8'
4'6.7.8.9.0.1'
tabla2
id   nrodocumento
1'3.4.5.6.7.8'
2'0.1.2.3.4.5'
3'1.2.3.4.5.6'

Se quiere saber que documentos de la tabla 1 están en la tabla 2 con
consulta sql, o necesariamente tengo que comparar en una funcion plpgsql?

Esperando su ayuda los saludo muy atentamente.


Re: [pgsql-es-ayuda] Ayuda sobre consulta SQL

2015-03-19 Por tema Alvaro Herrera
Linder Poclaba Lazaro escribió:
 Buenos días lista les escribo esperando me puedan dar algunos tips para
 poder solucionar la siguiente consulta, tengo dos tablas donde tengo campos
 de textos
 
 tabla1
 id   nrodocumento
 1   '1.2.3.4.5.6'
 2'2.3.4.5.6.7'
 3   '3.4.5.6.7.8'
 4'6.7.8.9.0.1'
 tabla2
 id   nrodocumento
 1'3.4.5.6.7.8'
 2'0.1.2.3.4.5'
 3'1.2.3.4.5.6'
 
 Se quiere saber que documentos de la tabla 1 están en la tabla 2 con
 consulta sql, o necesariamente tengo que comparar en una funcion plpgsql?

select ... from tabla1 except select ... from tabla2 ?
(Normalmente eso es lento. Mejor hacer un LEFT JOIN y pedir los que son
NULL).

-- 
Álvaro Herrerahttp://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training  Services

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda


Re: [MASSMAIL]Re: [pgsql-es-ayuda] Ayuda sobre consulta SQL

2015-03-19 Por tema Marcos Ortiz

Y por qué no usar un LEFT JOIN para ello?
Con éste podrías resolver el problema.

On 19/03/15 12:20, Gilberto Castillo wrote:



Buenos días lista les escribo esperando me puedan dar algunos tips para
poder solucionar la siguiente consulta, tengo dos tablas donde tengo
campos
de textos

tabla1
id   nrodocumento
1   '1.2.3.4.5.6'
2'2.3.4.5.6.7'
3   '3.4.5.6.7.8'
4'6.7.8.9.0.1'
tabla2
id   nrodocumento
1'3.4.5.6.7.8'
2'0.1.2.3.4.5'
3'1.2.3.4.5.6'

Se quiere saber que documentos de la tabla 1 están en la tabla 2 con
consulta sql, o necesariamente tengo que comparar en una funcion plpgsql?

No tengo idea de lo que realmente quieres hacer, pero con un simple Join o
usando Union, con ese campo como llave creo que resuelvas.

Saludos,
Gilberto Castillo
La Habana, Cuba


---
This message was processed by Kaspersky Mail Gateway 5.6.28/RELEASE running at 
host imx3.etecsa.cu
Visit our web-site: http://www.kaspersky.com, http://www.viruslist.com


-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripci�n:
http://www.postgresql.org/mailpref/pgsql-es-ayuda





[pgsql-es-ayuda] Ayuda sobre consulta

2010-05-31 Por tema Desarrollo Escuintla

Saludos Lista,

Tengo las siguientes tablas:


_TABLA_A
_codigo
doc


_TABLA_B
_codigo
doc



por eje:

TABLA_A
codigodoc
10  100
11   101
12  102
13  103
14  104

TABLA_B
codigodoc
10  100
11   101


la tabla_b depende de la tabla_a

para seleccionar los registros que no estan en la tabla_b, y si estan
en la tabla_a,

utilizo lo siguiente:

SELECT * FROM tabla_a
WHERE
CODIGO NOT IN (SELECT codigo FROM tabla_b;)


entonces, esto daria el resultado:

codigodoc
12  102
13  103
14  104


Ahora, esta consulta
?se prodria realizar con algun join?



Saludos



Re: [pgsql-es-ayuda] Ayuda sobre consulta

2010-05-31 Por tema Agustin Ignacio Genoves
select
a.*
from tabla_a a
left loin tabla_b b on
 a.codigo=b.codigo
wehere b.codigo is null

El día 31 de mayo de 2010 14:46, Desarrollo Escuintla
desarrollo.escuin...@gmail.com escribió:
 Saludos Lista,

 Tengo las siguientes tablas:


 TABLA_A
 codigo
 doc


 TABLA_B
 codigo
 doc



 por eje:

 TABLA_A
 codigo    doc
 10          100
 11   101
 12  102
 13  103
 14  104

 TABLA_B
 codigo    doc
 10          100
 11   101


 la tabla_b depende de la tabla_a

 para seleccionar los registros que no estan en la tabla_b, y si estan
 en la tabla_a,

 utilizo lo siguiente:

 SELECT * FROM tabla_a
 WHERE
 CODIGO NOT IN (SELECT codigo FROM tabla_b;)


 entonces, esto daria el resultado:

 codigo    doc
 12  102
 13  103
 14  104


 Ahora, esta consulta
 ?se prodria realizar con algun join?



 Saludos


-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda


Re: [pgsql-es-ayuda] Ayuda sobre consulta

2010-05-31 Por tema Julio Cesar Rodriguez Dominguez
El 31 de mayo de 2010 12:46, Desarrollo Escuintla 
desarrollo.escuin...@gmail.com escribió:

  Saludos Lista,

 Tengo las siguientes tablas:


 *TABLA_A
 *codigo
 doc


 *TABLA_B
 *codigo
 doc



 por eje:

 TABLA_A
 codigodoc
 10  100
 11   101
 12  102
 13  103
 14  104

 TABLA_B
 codigodoc
 10  100
 11   101


 la tabla_b depende de la tabla_a

 para seleccionar los registros que no estan en la tabla_b, y si estan
 en la tabla_a,

 utilizo lo siguiente:

 SELECT * FROM tabla_a
 WHERE
 CODIGO NOT IN (SELECT codigo FROM tabla_b;)


 entonces, esto daria el resultado:

 codigodoc
 12  102
 13  103
 14  104


 Ahora, esta consulta
 ?se prodria realizar con algun join?


Si, por ejemplo:
select * from otra_tabla inner join ( SELECT * FROM tabla_a WHERE CODIGO NOT
IN (SELECT codigo FROM tabla_b;) )  as temp using ( codigo );


Re: [pgsql-es-ayuda] Ayuda sobre consulta

2010-05-31 Por tema Agustin Ignacio Genoves
El día 31 de mayo de 2010 15:01, Julio Cesar Rodriguez Dominguez
jura...@gmail.com escribió:


 El 31 de mayo de 2010 12:46, Desarrollo Escuintla
 desarrollo.escuin...@gmail.com escribió:

 Saludos Lista,

 Tengo las siguientes tablas:


 TABLA_A
 codigo
 doc


 TABLA_B
 codigo
 doc



 por eje:

 TABLA_A
 codigo    doc
 10          100
 11   101
 12  102
 13  103
 14  104

 TABLA_B
 codigo    doc
 10          100
 11   101


 la tabla_b depende de la tabla_a

 para seleccionar los registros que no estan en la tabla_b, y si estan
 en la tabla_a,

 utilizo lo siguiente:

 SELECT * FROM tabla_a
 WHERE
 CODIGO NOT IN (SELECT codigo FROM tabla_b;)


 entonces, esto daria el resultado:

 codigo    doc
 12  102
 13  103
 14  104


 Ahora, esta consulta
 ?se prodria realizar con algun join?

 Si, por ejemplo:
 select * from otra_tabla inner join ( SELECT * FROM tabla_a WHERE CODIGO NOT
 IN (SELECT codigo FROM tabla_b;) )  as temp using ( codigo );

Si, y despues haces un dump de la base y la llevas a otro servidor y
despues reinstalas el SO y bajas la termica de tu casa. Creo que con
eso haces lo que queres, mas que eso no se puede complicar.
-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda


Re: [pgsql-es-ayuda] Ayuda sobre consulta

2010-05-31 Por tema Julio Cesar Rodriguez Dominguez
El 31 de mayo de 2010 13:32, Agustin Ignacio Genoves 
agustingeno...@gmail.com escribió:

 El día 31 de mayo de 2010 15:01, Julio Cesar Rodriguez Dominguez
 jura...@gmail.com escribió:
 
 
  El 31 de mayo de 2010 12:46, Desarrollo Escuintla
  desarrollo.escuin...@gmail.com escribió:
 
  Saludos Lista,
 
  Tengo las siguientes tablas:
 
 
  TABLA_A
  codigo
  doc
 
 
  TABLA_B
  codigo
  doc
 
 
 
  por eje:
 
  TABLA_A
  codigodoc
  10  100
  11   101
  12  102
  13  103
  14  104
 
  TABLA_B
  codigodoc
  10  100
  11   101
 
 
  la tabla_b depende de la tabla_a
 
  para seleccionar los registros que no estan en la tabla_b, y si estan
  en la tabla_a,
 
  utilizo lo siguiente:
 
  SELECT * FROM tabla_a
  WHERE
  CODIGO NOT IN (SELECT codigo FROM tabla_b;)
 
 
  entonces, esto daria el resultado:
 
  codigodoc
  12  102
  13  103
  14  104
 
 
  Ahora, esta consulta
  ?se prodria realizar con algun join?
 
  Si, por ejemplo:
  select * from otra_tabla inner join ( SELECT * FROM tabla_a WHERE CODIGO
 NOT
  IN (SELECT codigo FROM tabla_b;) )  as temp using ( codigo );

 Si, y despues haces un dump de la base y la llevas a otro servidor y
 despues reinstalas el SO y bajas la termica de tu casa. Creo que con
 eso haces lo que queres, mas que eso no se puede complicar.


??. Cuál fué la intención de tanta palabrería?