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

5 últimas noticias en MS SQL

Estas en el tema de 5 últimas noticias en MS SQL en el foro de SQL Server en Foros del Web. Buenas a todos, tengo un problema con una consulta sql y quisiera saber si hay alguien que me lo pueda resolver. El caso es que ...
  #1 (permalink)  
Antiguo 25/01/2008, 05:52
 
Fecha de Ingreso: enero-2008
Mensajes: 5
Antigüedad: 17 años
Puntos: 0
5 últimas noticias en MS SQL

Buenas a todos,

tengo un problema con una consulta sql y quisiera saber si hay alguien que me lo pueda resolver.
El caso es que quiero obtener las 5 últimas noticias que se han publicado en unos determinados centros. Con la instrucción:

SELECT TablaCentros.Centro, TablaNoticias.IdNoticia, TablaNoticias.FechaRealizacion, TablaNoticias.Titulo
FROM TablaNoticias News, TablaCentros Cen
WHERE TablaNoticias.CodigoCentro=TablaCentros.CodigoCent ro AND TablaNoticias.CodigoCentro IN (1,3,5,7,9,12)
ORDER BY TablaNoticias.CodigoCentro, TablaNoticias.FechaRealizacion DESC

obtengo todas las noticias publicadas por cada centro. Si pongo el 'TOP 5' tendría:

SELECT TOP 5 TablaCentros.Centro, TablaNoticias.IdNoticia, TablaNoticias.FechaRealizacion, TablaNoticias.Titulo
FROM TablaNoticias News, TablaCentros Cen
WHERE TablaNoticias.CodigoCentro=TablaCentros.CodigoCent ro AND TablaNoticias.CodigoCentro IN (1,3,5,7,9,12)
ORDER BY TablaNoticias.CodigoCentro, TablaNoticias.FechaRealizacion DESC

y me da como resultado tan sólo las 5 últimas noticias que ha encontrado, pero sólo del primer centro; y ahí está el problema porque lo que quiero es obtener las 5 últimas noticias pero de todos los centros. ¿¿Hay alguna forma de hacerlo??

Muchas gracias por adelantado. Espero haberme explicado bien.

Saludos,


Sergi.
  #2 (permalink)  
Antiguo 25/01/2008, 09:10
 
Fecha de Ingreso: enero-2008
Mensajes: 13
Antigüedad: 17 años
Puntos: 0
Re: 5 últimas noticias en MS SQL

lo que puedes hacer y no es la mejor forma creo pero lo mas rapido que se me viene a la mente es hacer la misma consulta del top5 pero para un solo grupo y luego hacer "UNION" la misma consulta del top5 pero del segundo grupo y asi sucesivamente.espero que te sirva al menos para salir del paso. si se me ocurre una forma mas coloquial comento de nuevo.saludos
  #3 (permalink)  
Antiguo 25/01/2008, 12:59
Avatar de Beakdan  
Fecha de Ingreso: diciembre-2001
Ubicación: Monterrey, Nuevo León
Mensajes: 433
Antigüedad: 23 años
Puntos: 7
Re: 5 últimas noticias en MS SQL

Espero que estes usando SQL Server 2005. Con SQL Server 2000 tendría que pensarlo. Quizá creando una función que devuelva los top 5 usando CodigoCentro. Habría que ver. En fin, con SQL Server 2005:
Código:
SELECT      cen.Centro,
            news.IdNoticia,
            news.FechaRealizacion,
            news.Titulo
FROM        (
                SELECT      CodigoCentro,
                            IdNoticia,
                            FechaRealizacion,
                            Titulo,
                            ROW_NUMBER() OVER(PARTITION BY CodigoCentro ORDER BY FechaRealizacion DESC) AS rn
                FROM        TablaNoticias
                WHERE       CodigoCentro IN (1,3,5,7,9,12)
            ) AS news
INNER JOIN  TablaCentros AS cen
            ON news.CodigoCentro = cen.CodigoCentro
WHERE       news.rn <= 5
ORDER BY    news.CodigoCentro,
            news.FechaRealizacion DESC 
  #4 (permalink)  
Antiguo 29/01/2008, 11:02
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años, 8 meses
Puntos: 25
Re: 5 últimas noticias en MS SQL

El secreto de TOP está en como uses el ORDER BY. Prueba tu misma sentencia pero cambiando el final a:

ORDER BY TablaNoticias.FechaRealizacion DESC, TablaNoticias.CodigoCentro ASC
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #5 (permalink)  
Antiguo 31/01/2008, 03:13
 
Fecha de Ingreso: enero-2008
Mensajes: 5
Antigüedad: 17 años
Puntos: 0
Re: 5 últimas noticias en MS SQL

Para Beakan:
Muchas gracias por tu ejemplo, pero al ejecutarlo me dice lo siguiente:
'ROW_NUMBER' no es un nombre de función reconocido.
Y estoy utilizando SQL SERVER 2005, ¿por qué no me lo reconoce?

Para Mithrandir:
Al hacer eso no me hace exactamente lo que quiero y me salen todas las noticias; pero muchas gracias de todas formas :)

Gracias a los dos otra vez por vuestra ayuda.

Saludos!!
  #6 (permalink)  
Antiguo 31/01/2008, 11:53
Avatar de Beakdan  
Fecha de Ingreso: diciembre-2001
Ubicación: Monterrey, Nuevo León
Mensajes: 433
Antigüedad: 23 años
Puntos: 7
Re: 5 últimas noticias en MS SQL

Es muy extraño. Aún usando la base de datos en modo de compatibilidad con SQL Server 2000, debería funcionar. No hay requerimientos extras para usar las funciones de Ranking.
Lo único que se me ocurre es que estés usando las herramientas de SQL Server 2005, pero te estés conectando a una instancia de SQL Server 2000.
Checa con select @@version
¿Realmente es SQL Server 2005 donde ejecutas esta consulta?
  #7 (permalink)  
Antiguo 01/02/2008, 02:47
 
Fecha de Ingreso: enero-2008
Mensajes: 5
Antigüedad: 17 años
Puntos: 0
Re: 5 últimas noticias en MS SQL

Muchas gracias Beakdan; sí que me funciona y lo hace correctamente; tenías razón.
El problema es que primero lo probé en una Base de Datos 'de pruebas' en la que pensé que tenía MS SQL Server 2005, pero no era así, ya que es más antigua y tenía la versión 2000. Pero al probarlo en 'la buena' sí que me funcionó, ya que es una MS SQL Server 2005.
Siento el error...

Muchas gracias por todo, de verdad.

Saludos.
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 00:37.