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

Select top 5

Estas en el tema de Select top 5 en el foro de SQL Server en Foros del Web. Buenos Dias! espero y alguien me pueda ayudar, estoy trabajando con la base de datos msdb y algunas tablas como la jobhistory. Lo que sucede ...
  #1 (permalink)  
Antiguo 12/03/2010, 15:29
 
Fecha de Ingreso: octubre-2009
Mensajes: 26
Antigüedad: 14 años, 6 meses
Puntos: 0
Select top 5

Buenos Dias!

espero y alguien me pueda ayudar, estoy trabajando con la base de datos msdb y algunas tablas como la jobhistory. Lo que sucede es que deseo mostrar un reporte en donde me arroje las 5 ultimas actividades de cada job, sin embargo si hago un simple select top 5 me mostrara solo los primeros 5 registros, pero necesito los primeros 5 registros de cada job...no se si me este explicando bien, y si es asi alguien ke me pueda ayudar lo agradeceria muchisimo
  #2 (permalink)  
Antiguo 12/03/2010, 16:24
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Select top 5

Muestranos como lo estas haciendo.........
  #3 (permalink)  
Antiguo 15/03/2010, 08:13
 
Fecha de Ingreso: octubre-2009
Mensajes: 26
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Select top 5

este es el codigo que uso actualmente...

select top 5 B.name, C.run_status, A.next_scheduled_run_date, C.message
from sysjobactivity A inner join sysjobs B on A.job_id = B.job_id
inner join sysjobhistory C on A.job_id = C.job_id
where B.name = 'JOB_1'
group by B.name, C.run_status, C.run_date, A.next_scheduled_run_date, C.message

union

select top 5 B.name, C.run_status, A.next_scheduled_run_date, C.message
from sysjobactivity A inner join sysjobs B on A.job_id = B.job_id
inner join sysjobhistory C on A.job_id = C.job_id
where B.name = 'JOB_2'
group by B.name, C.run_status, C.run_date, A.next_scheduled_run_date, C.message


sin embargo este codigo, aunque me muestra lo que busco, no me funciona muy bien ya que se le tendria que estar dando mantenimiento cada vez que sea agregado o quitado un Job....alguna sugerencia de como poder hacer este procedimiento de manerea generica para no tener que estar dandole mantenimiento?
  #4 (permalink)  
Antiguo 15/03/2010, 10:20
 
Fecha de Ingreso: octubre-2009
Mensajes: 26
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Select top 5

Buen Dia a todos!

encontre una solucion a lo que necesitaba sin embargo surgio un problema mas...la solucion la resolvi con el siguiente codigo...

DECLARE @nCOUNT INT
SET @nCOUNT = 1
DECLARE @nMAXVALUE INT

/*------------------- CREATION OF TEMP TABLES-----------*/
CREATE TABLE #JOBS
(
ID INT IDENTITY PRIMARY KEY,
NAME VARCHAR(50)
)

CREATE TABLE #HISTORY
(
NAME VARCHAR(80),
STATUS_CD INT,
RUN_DT DATETIME,
NEXT_DATE DATETIME,
MESSAGE VARCHAR(900)
)



/*-----------INSERT DATA TO THE TABLES----------------*/
INSERT INTO #JOBS
(
NAME
)
SELECT name FROM sysjobs

SELECT @nMAXVALUE = MAX(ID)
FROM #JOBS


WHILE (@nCOUNT <= @nMAXVALUE)
BEGIN

INSERT INTO #HISTORY
(
NAME, STATUS_CD, RUN_DT, NEXT_DATE, MESSAGE
)

select top 5 B.name, C.run_status, A.next_scheduled_run_date, C.message
from sysjobactivity A inner join sysjobs B on A.job_id = B.job_id
inner join sysjobhistory C on A.job_id = C.job_id
where B.name = (SELECT NAME FROM #JOBS WHERE ID = @nCOUNT)
group by B.name, C.run_status, C.run_date, A.next_scheduled_run_date, C.message

SET @nCOUNT = @nCOUNT + 1

END

SELECT * FROM #HISTORY

DROP TABLE #JOBS
DROP TABLE #HISTORY

---------------------
sin embargo es que ahora el sp toma mucho tiempo en poder ejecutarse ya que se realiza la consulta n veces....alguien tiene alguna mejor idea de como hacer esto??

cualquier comentario es bien recibido =)
  #5 (permalink)  
Antiguo 16/03/2010, 00:02
 
Fecha de Ingreso: octubre-2009
Mensajes: 26
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Select top 5

Buen dia a todos....ya encontre la solucion, la comento por si alguien la llegas e a necesitar,

lo que tuve que hacer es usar la funcion PARTITION BY para poder particionar los datos y asi solo agregar a la condicion Where el que sean solo los primeros 5 es decir where ID <= 5

saludos, espero y a alguien le sirva =)

Etiquetas: select, top
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 14:38.