Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Problema con instruccion sql

Estas en el tema de Problema con instruccion sql en el foro de SQL Server en Foros del Web. Hola a todos! Tengo una tabla llamada "Chat" con los campos: CODIGO: AUTONUMERICO TEXTO: linea de texto que se envio CONVERSACION: indica a que conversacion ...
  #1 (permalink)  
Antiguo 28/04/2011, 12:59
 
Fecha de Ingreso: febrero-2011
Mensajes: 5
Antigüedad: 13 años, 2 meses
Puntos: 0
Problema con instruccion sql

Hola a todos! Tengo una tabla llamada "Chat"

con los campos:

CODIGO: AUTONUMERICO
TEXTO: linea de texto que se envio
CONVERSACION: indica a que conversacion pertenece el texto
FECHA: fecha en la que se envio

un ejemplo de tabla:
CODIGO TEXTO CONVERSACION FECHA
1 hola juan 1 2/2/2
2 hola jose! 1 2/2/2
3 bueno me voy 1 2/2/2
4 hola estas? 2 2/3/2
5 si decime 2 2/3/2

LO QUE YO QUIERO HACER, es que me tome y devuelva:
Codigo, texto, conversacion y fecha
DE EL PRIMER TEXTO ENVIADO DE CADA CONVERSACION. En este caso que me devuelva en la instruccion sql:

CODIGO TEXTO CONVERSACION FECHA
1 hola juan 1 2/2/2
2 hola estas? 2 2/3/2


No lo puedo hacer! me rompo la cabeza pero no lo logro! Alguna ayuda??? Gracias!!
  #2 (permalink)  
Antiguo 28/04/2011, 13:17
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Problema con instruccion sql

Prueba con algo asi :)

Código SQL:
Ver original
  1. CREATE TABLE #temp
  2. (
  3. codigo INT,
  4. texto VARCHAR(200),
  5. conversacion INT,
  6. fecha datetime
  7. )
  8.  
  9. INSERT INTO #temp (codigo,texto,conversacion,fecha) VALUES (1,'Hola juan',1,getdate())
  10. INSERT INTO #temp (codigo,texto,conversacion,fecha) VALUES (2,'Hola jose',1,getdate())
  11. INSERT INTO #temp (codigo,texto,conversacion,fecha) VALUES (3,'bueno me voy',1,getdate())
  12. INSERT INTO #temp (codigo,texto,conversacion,fecha) VALUES (4,'Hola estas?',2,getdate())
  13. INSERT INTO #temp (codigo,texto,conversacion,fecha) VALUES (5,'si decime',2,getdate())
  14.  
  15. SELECT codigo,texto,conversacion,fecha, IDENTITY(INT,1,1) ROW INTO #temp2  FROM(
  16. SELECT ROW_NUMBER () OVER ( PARTITION BY conversacion ORDER BY conversacion ASC) AS RN, * FROM #temp
  17. ) t1 WHERE rn=1
  18.  
  19. SELECT ROW,texto,conversacion,fecha FROM #temp2

Saludos!!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 28/04/2011, 13:25
 
Fecha de Ingreso: febrero-2011
Mensajes: 5
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: Problema con instruccion sql

Gracias por la respuesta Libras.

Pero la tabla que creaste que llamaste Temp, la estas generando vos. Yo ya tengo una tabla con miles de registros de conversaciones de chat, y no podria andar generando tantos INSERT INTO.

De todas maneras podria trabajar con mi tabla en vez de con $temp. Pero no me funciono!!!!. no me reconoce lo que le sigue. Si sabes otra manera te agradezc

Gracias!!
  #4 (permalink)  
Antiguo 28/04/2011, 13:34
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Problema con instruccion sql

select codigo,texto,conversacion,fecha, identity(int,1,1) row into #temp2 from(
select ROW_NUMBER () OVER ( PARTITION BY conversacion ORDER BY conversacion ASC) AS RN, * from tu_tabla
) t1 where rn=1

select row,texto,conversacion,fecha from #temp2


Prueba algo asi, y temp es la tabla que use para obtener los registros tal y como los muestras. saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 28/04/2011, 13:55
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Problema con instruccion sql

Hola hack54:

Como decía el compañero Iislas hace algunos post's,

Cita:
hay muchas maneras de matar una pulga, pero usar una bomba atómica es demaciado
Creo yo que no hay necesidad de utilizar funciones analíticas (ROW_NUMBER()) para obtener lo que necesitas. A final de cuentas estás manejando un campo autonumérico (Codigo) para cada conversación, por lo tanto, si obtienes el mínimo código para cada conversación entonces obtendrás el primer inicio de la misma, en otras palabras sería algo como esto:

Código SQL:
Ver original
  1. SELECT T1.* FROM chat T1 INNER JOIN
  2. (
  3. SELECT conversacion, MIN(codigo) min_codigo FROM chat GROUP BY conversacion
  4. ) T2 ON T1.conversacion = T2.conversacion AND T1.codigo = T2.min_codigo

Haz la prueba y nos comentas.

Saludos

Etiquetas: instruccion, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:41.