Autor Tema: [Ayuda con SQL] Listar solo las filas unicas?  (Leído 13403 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado vlad

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 6351
    • Qualium.net
Re: [Ayuda con SQL] Listar solo las filas unicas?
« Respuesta #15 : agosto 27, 2008, 05:30:01 pm »
SELECT * FROM tMensualidades WHERE Codigo="XXX" AND Mes BETWEEN date('now','start of month') AND date('now','start of month','+1 month','-1 day');

Gracias y olvidenlo, eso funciona x_x lo que pasa es que las fechas en la base de datos estaban escritas en la forma "dd/mm/yy" y SQL las queria en forma "yyyy/mm/dd" x_x

Desconectado rcguillen

  • -^- Elite Silver -^-
  • The Communiter-
  • *
  • Mensajes: 2320
Re: [Ayuda con SQL] Listar solo las filas unicas?
« Respuesta #16 : agosto 27, 2008, 06:37:17 pm »
Mi consejo basado en experiencia es q para manejar fechas las manejes en el formato añomesdia digamos si quieres el periodo del 1 al 31 de enero seri asi

select * from mytabla where convert(char(8),myfecha,112) >= '20080101' and convert(char(8),myfecha,112) <= '20080131'

Trata de aplicar ambas formas de hacer los select tanto la q ya tienes como la q te estoy colocando aca y saca tus conclusiones.

Saludos

Gracias y olvidenlo, eso funciona x_x lo que pasa es que las fechas en la base de datos estaban escritas en la forma "dd/mm/yy" y SQL las queria en forma "yyyy/mm/dd" x_x
-:Rcguillen-NoMercy:-
-:Es inutil hacer cualquier cosa a prueba de tontos, porque los tontos son muy ingeniosos:-

Desconectado vlad

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 6351
    • Qualium.net
Re: [Ayuda con SQL] Listar solo las filas unicas?
« Respuesta #17 : octubre 10, 2008, 07:13:30 am »
Gracias :)



Una nueva consulta:

Supongamos que tengo dos tablas:


Tabla1: Abreviaturas

No | Valor
1 | Abreviatura1
2 | Abreviatura 2
3 | Abreviatura 3
n | Abreviatura n

Tabla2: Datos

No | Descripcion
1 | Descripción 1
2 | Descripción 2
3 | Descripción 3
n | Descripción n

Entonces quisiera que al realizar la consulta de la tabla 2, la col "No" fuera reemplazado por su respectivo valor (de Abreviatura) segun la tabla 1. Como puedo logra esto?.

Ahorita lo estoy haciendo asi:

select Abreviatura, Descripcion from tabla1, tabla2 on tabla1.No = tabla2.No

Eso me funciona, pero aun en una pequeña base de datos con solo 40000 registros, esto hace un gran, GRAN, detrimento en el desempeño.

Alguna sugerencia?.

Buscaba algo menos asi (no es que funcione, pero no se si se podra):

select No as Abreviatura, Descripcion from tabla2

Desconectado tekun

  • -^- Elite Silver -^-
  • The Communiter-
  • *
  • Mensajes: 3221
  • Han convertido mi casa en cueva de mercaderes!!!!
    • www.tekun.es
Re: [Ayuda con SQL] Listar solo las filas unicas?
« Respuesta #18 : octubre 10, 2008, 08:39:09 am »
.........
Entonces quisiera que al realizar la consulta de la tabla 2, la col "No" fuera reemplazado por su respectivo valor (de Abreviatura) segun la tabla 1. Como puedo logra esto?.

Ahorita lo estoy haciendo asi:

select Abreviatura, Descripcion from tabla1, tabla2 on tabla1.No = tabla2.No

Eso me funciona, pero aun en una pequeña base de datos con solo 40000 registros, esto hace un gran, GRAN, detrimento en el desempeño.

Alguna sugerencia?.....

va!

intentando entender lo que has planteado lo dire en otras palabras....

si no me equivoco de lo que tenes y lo que queres lograr... es unir en un resultado campos de dos tablas diferentes....

de ser así, parto de la idea de que ambas tablas estan relacionadas.... y el constraint esta en el campo "No".... esto -no necesariamente- requiere que la relación exista en la base de datos...porque optimizara las consultas que hagas relacionando ambas tablas.... esto puede ser un factor por el cual se tarde el script que ejecutas...

ahora con tu script...
select Abreviatura, Descripcion from tabla1, tabla2 on tabla1.No = tabla2.No

para iniciar te dire, quizá no te diste cuenta que según lo que has puesto, el Campo "Abreviatura" no existe, ese es el dato, según tu ejemplo el nombre del campo es "Valor" en la tabla 1..... pero igual, ya intentaste poniendo el where tabla1.No=tabla2.No en lugar de lo que tenés....


otra cosa....
según lo último que decis.... eso yo lo veo como una sub-consulta (subQuery)..... quedaría algo así...

Código: [Seleccionar]
select
(select Valor from tabla1 where a.No=No) as Abreviatura
,Descripcion
from tabla2 as a
lo difícil lo hago rápido, con lo imposible, casi siempre me tardo un poquito

Desconectado JGuillen™

  • -^- Elite Silver -^-
  • The Communiter-
  • *
  • Mensajes: 3449
  • PHP,C#,MySQL,SQL
Re: [Ayuda con SQL] Listar solo las filas unicas?
« Respuesta #19 : octubre 10, 2008, 02:42:41 pm »
Yo lo entiendo de esta manera....


Queres mostrar todas las abreviaturas de la tabla1 que tambien esten en la tabla 2... entonces lo haria a si....



Código: [Seleccionar]
select A.No, B.descripcion from tabla1 as A inner join tabla2 as B on A.No = B.No


Sera eso lo que necesitas.... porq eso es lo que entiendo q necesitas.... sera eso...?  :huh:

Desconectado John Stark!

  • Sv Full Member
  • *
  • Mensajes: 906
  • I survived my first match, with only 2 broken ribs
Re: [Ayuda con SQL] Listar solo las filas unicas?
« Respuesta #20 : octubre 10, 2008, 03:30:27 pm »
Vlad:

la solicion es lo que te dice Juillen
Citar
SELECT [id1].Abreviatura, [id2].Descripcion FROM Tabla1 AS [id1] INNER JOIN Tabla2 AS [id2] ON [id1].No=[id2].No

la sentencia que tu planteabas
Citar
select No as Abreviatura, Descripcion from tabla2
lo unico que haria es cambiar el nombre de la columna No a Abreviatura pero te seguiria regresando los datos de No.

Ademas, si la consulta aun asi es demasido lenta, prueba haciendo una vista con la consulta de arriiba. asi la llamas cuando necesites.  :thumbsup:

Desconectado vlad

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 6351
    • Qualium.net
Re: [Ayuda con SQL] Listar solo las filas unicas?
« Respuesta #21 : octubre 10, 2008, 07:46:25 pm »
Muchisimas gracias a los tres, voy a probar las tres soluciones, sin embargo ahorita sin probarlas, creo que la respuesta de Tekun es la más aproximada a lo que necesito.

La de JGuillen™ me parece que en la columna "No" me devolvería el valor en "No" y no su abreviatura.

La de Vladimir
Código: [Seleccionar]
SELECT [id1].Abreviatura, [id2].Descripcion FROM Tabla1 AS [id1] INNER JOIN Tabla2 AS [id2] ON [id1].No=[id2].No Gracias, pero es asi como lo tengo ahorita (reemplazando el INNER JOIN por "," y sin los alias de las tablas). Te agradezco la otra correccion que me hiciste.

La de tekun
Código: [Seleccionar]
select (select Valor from tabla1 where a.No=No) as Abreviatura, Descripcion from tabla2 as aMe parece que es justo lo que busco, lo cual es hacer el reemplazo sin necesidad de hacer el join, que es la operacion mas costosa porque me une una tablad e 40000 valores con una de 73 (hay solo 73 abreviaturas, repartidas en 40000 registros).



Como sea, probaré una por una en  iguales condiciones para determinar cual es la más veloz.

Muchas gracias de antemano, se han ganado un K+ de mi parte!

Desconectado Gaara

  • Sv Full Member
  • *
  • Mensajes: 673
  • What is love??... please tell me
Re: [Ayuda con SQL] Listar solo las filas unicas?
« Respuesta #22 : abril 13, 2009, 03:29:33 pm »
Bueno mi problema es parecido al que se planteaba en este post un poco mas complejo talves me puedan ayudar bueno yo tengo algo parecido a esto, dentro de un procedimiento almacenado

userid   mail         body   
1              email1   cuerpo1
1              email1   cuerpo2
2              email2   cuerpo3
2              email2   cuerpo4
3              email3   cuerpo5
4              email4   cuerpo6

quiero obtener algo parecido a esto:

userid   mail         body   
1              email1   cuerpo1 + cuerpo2
2              email2   cuerpo3 + cuerpo4
3              email3   cuerpo5
4              email4   cuerpo6

la cuestion es que en este bloque de información obtenga todos los cuerpos de todos los mensajes que le corresponden a ese usuario,
esto sirve para que por ejemplo en lugar de mandar diez correos yo solo mande un correo con toda la información correspondiente espero me
puedan ayudar lo intente con cursores scroll  pero ya me hice bolas   :phew:






What is love???...please tell me

Desconectado vlad

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 6351
    • Qualium.net
Re: [Ayuda con SQL] Listar solo las filas unicas?
« Respuesta #23 : abril 13, 2009, 04:10:31 pm »
SELECT DISTINCT userid, GROUP_CONCAT(body) FROM tabla GROUP BY userid

Desconectado tekun

  • -^- Elite Silver -^-
  • The Communiter-
  • *
  • Mensajes: 3221
  • Han convertido mi casa en cueva de mercaderes!!!!
    • www.tekun.es
Re: [Ayuda con SQL] Listar solo las filas unicas?
« Respuesta #24 : abril 13, 2009, 08:30:44 pm »
userid   mail         body   
1              email1   cuerpo1
1              email1   cuerpo2
2              email2   cuerpo3
2              email2   cuerpo4
3              email3   cuerpo5
4              email4   cuerpo6

quiero obtener algo parecido a esto:

userid   mail         body   
1              email1   cuerpo1 + cuerpo2
2              email2   cuerpo3 + cuerpo4
3              email3   cuerpo5
4              email4   cuerpo6

que RDBMS tas ocupando...?¿?¿

porque si es postgres ya la hiciste, porque existen crosstab que es justo lo que necesitas...

porque en sqlServer de MS [se me ocurre] te tocara buscar los datos en un cursor y incrustar el resultado en una tabla temporal y luego mostrar el resultado
lo difícil lo hago rápido, con lo imposible, casi siempre me tardo un poquito

Desconectado darkness51

  • Sv Member
  • ***
  • Mensajes: 208
    • DWD&Solutions
Re: [Ayuda con SQL] Listar solo las filas unicas?
« Respuesta #25 : abril 13, 2009, 09:22:13 pm »
Vlad, la respuesta de tekun se conoce como plano cartesiano y la otra que te habian dado se conoce como join
http://www.houseofsysadmin.com
http://www.dwdandsolutions.com

Desconectado vlad

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 6351
    • Qualium.net
Re: [Ayuda con SQL] Listar solo las filas unicas?
« Respuesta #26 : abril 14, 2009, 04:37:19 am »
Vlad, la respuesta de tekun se conoce como plano cartesiano y la otra que te habian dado se conoce como join
Gracias, si, la respuesta de Tekun fue acertada  :sur:

Gracias Tekun, se me habia olvidado este tema xD

Desconectado Gaara

  • Sv Full Member
  • *
  • Mensajes: 673
  • What is love??... please tell me
Re: [Ayuda con SQL] Listar solo las filas unicas?
« Respuesta #27 : abril 14, 2009, 07:57:40 am »
SELECT DISTINCT userid, GROUP_CONCAT(body) FROM tabla GROUP BY userid

Hey gracias Vlad me puse a investigar acerca de la funcion group_concat de mysql y es justamente lo que necesito gracias  :thumbsup: solo que tengo un problemilla esa función no existe en sql server 2005 de microsoft  x_x alguno de ustedes sabra de algo equivalente???  :sorry:
What is love???...please tell me

Desconectado vlad

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 6351
    • Qualium.net
Re: [Ayuda con SQL] Listar solo las filas unicas?
« Respuesta #28 : abril 14, 2009, 08:08:22 am »
Hey que lastima, pense que tambien estabas usando MySQL :phew:

Sin embargo por suerte parece que no sos el primero que necesita simular group_concat en SQL Server 2005:
http://www.google.com.sv/search?q=group_concat+sql+server+2005&ie=utf-8&oe=utf-8

En especial este resultado [en ingles]:
http://blog.shlomoid.com/2008/11/emulating-mysqls-groupconcat-function.html

Desconectado Gaara

  • Sv Full Member
  • *
  • Mensajes: 673
  • What is love??... please tell me
Re: [Ayuda con SQL] Listar solo las filas unicas?
« Respuesta #29 : abril 14, 2009, 08:33:38 am »
Hey que lastima, pense que tambien estabas usando MySQL :phew:

Sin embargo por suerte parece que no sos el primero que necesita simular group_concat en SQL Server 2005:
http://www.google.com.sv/search?q=group_concat+sql+server+2005&ie=utf-8&oe=utf-8

En especial este resultado [en ingles]:
http://blog.shlomoid.com/2008/11/emulating-mysqls-groupconcat-function.html


Hey gracias Vlad  :thumbsup: habia estado buscando en san google pero no habia encontrado nada me parece que esa ultima pagina que has posteado tiene la solución gracias  :thumbsup:
What is love???...please tell me