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

Consulta sencilla que me trae de cabeza

Estas en el tema de Consulta sencilla que me trae de cabeza en el foro de SQL Server en Foros del Web. Hola, tengo una tabla con usuarios donde cada usuario puedes introducir una noticia y lo que quiero hacer es que NO se muestren en la ...
  #1 (permalink)  
Antiguo 26/11/2006, 05:53
Avatar de RUX
RUX
 
Fecha de Ingreso: enero-2004
Ubicación: Las Palmas de Gran Canari
Mensajes: 566
Antigüedad: 20 años, 3 meses
Puntos: 0
Consulta sencilla que me trae de cabeza

Hola, tengo una tabla con usuarios donde cada usuario puedes introducir una noticia y lo que quiero hacer es que NO se muestren en la pagina mas de 1 noticia por usuario, es decir, si un usuario tiene 2 noticias, que muestre solo la mas reciente.

He probado asi y de muchas formas mas:
SELECT * FROM noticias GROUP BY id_usuarios ORDER BY fecha DESC

pero no consigo que me saque la ultima la ultima introducida, y no uso LIMIT pq me limita solo a una fila en toda la consulta.

Alguna sugerencia o ayuda?
Gracias de antemano.
SALUDOS
__________________
Rux.es - Sitio Personal | IslaRock.com - Todo Rock
  #2 (permalink)  
Antiguo 26/11/2006, 13:32
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Interesante pregunta...

Se me ocurre algo como esto:

SELECT TOP 10 Max(id_noticia)
FROM noticias
GROUP BY id_usuario

Eso te regresará la llave de las 10 noticias más recientes (asumiendo que id_noticia es un identity). El resto es hacer el join de esas llaves nuevamente contra la tabla de noticias:

SELECT n1.* FROM noticias n1
INNER JOIN (SELECT TOP 10 Max(id_noticia)
FROM noticias GROUP BY id_usuario) n2
ON n1.id_noticia = n2.id_noticia
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #3 (permalink)  
Antiguo 29/11/2006, 17:35
Avatar de Gabo77  
Fecha de Ingreso: noviembre-2006
Mensajes: 381
Antigüedad: 17 años, 5 meses
Puntos: 6
La consulta es sencilla.

SELECT
*
FROM
USUARIOS U
INNER JOIN
NOTICIAS N
ON
U.IDUSUARIO = N.IDUSUARIO
AND
N.FECHA = (SELECT MAX(FECHA) FROM NOTICIAS WHERE IDUSUARIO = U.IDUSUARIO)

Saludos!
  #4 (permalink)  
Antiguo 29/11/2006, 17:35
Avatar de Gabo77  
Fecha de Ingreso: noviembre-2006
Mensajes: 381
Antigüedad: 17 años, 5 meses
Puntos: 6
aahh!! esto no respeta mis identaciones?? que lata!!
  #5 (permalink)  
Antiguo 30/11/2006, 12:53
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Cita:
Iniciado por Gabo77 Ver Mensaje
aahh!! esto no respeta mis identaciones?? que lata!!
Mételo dentro del tag [ code ][ /code ] y verás que funciona (solo quita los espacios entre corchetes).
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #6 (permalink)  
Antiguo 30/11/2006, 14:03
Avatar de Gabo77  
Fecha de Ingreso: noviembre-2006
Mensajes: 381
Antigüedad: 17 años, 5 meses
Puntos: 6
Código:
SELECT
        *
FROM
        USUARIOS U
INNER JOIN
        NOTICIAS N
        ON
        U.IDUSUARIO = N.IDUSUARIO
        AND
        N.FECHA = (SELECT MAX(FECHA) FROM NOTICIAS WHERE IDUSUARIO = U.IDUSUARIO)
  #7 (permalink)  
Antiguo 30/11/2006, 14:04
Avatar de Gabo77  
Fecha de Ingreso: noviembre-2006
Mensajes: 381
Antigüedad: 17 años, 5 meses
Puntos: 6
Que bonito es lo bonito!!
  #8 (permalink)  
Antiguo 30/11/2006, 16:50
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
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 17:49.