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

[SOLUCIONADO] Tomar el máximo de una serie de consultas

Estas en el tema de Tomar el máximo de una serie de consultas en el foro de SQL Server en Foros del Web. Buenos días a todos. Les comento que estoy empezando a programar en SQL Server 2008. Mi nivel es Junior por ende sé que debo aprender ...
  #1 (permalink)  
Antiguo 06/04/2015, 08:24
 
Fecha de Ingreso: abril-2015
Ubicación: Buenos Aires
Mensajes: 5
Antigüedad: 9 años
Puntos: 0
Tomar el máximo de una serie de consultas

Buenos días a todos.
Les comento que estoy empezando a programar en SQL Server 2008. Mi nivel es Junior por ende sé que debo aprender bastante para llegar a optimizar las consultas que realizo.
La duda que tengo en este momento es la siguiente:

Tengo la siguiente sentencia:
Código SQL:
Ver original
  1. SELECT WK1.[Work_WorkID]
  2.       ,WK1.[SubWork_Title]
  3.       ,wk3.WorkAudit_Task_Title
  4.       ,wk3.WorkAudit_PerformerID_Name
  5.       ,wk3.Fecha_tarea
  6.       FROM [CSMAE].[ecm].[WebActiveWork] AS WK1 ,
  7.           (SELECT WorkAudit_WorkID,MAX(WorkAudit_Date) AS Fecha_tarea,WorkAudit_Status,WorkAudit_Task_Title,WorkAudit_PerformerID_Name
  8.            FROM (
  9.            
  10.               SELECT WK2.[WorkAudit_WorkID]
  11.                     ,[WorkAudit_AuditID]
  12.                     ,[WorkAudit_TaskID]
  13.                     ,[WorkAudit_Date]
  14.                     ,[WorkAudit_Status]
  15.                     ,[WorkAudit_TaskIterNum]
  16.                     ,[WorkAudit_Task_Title]
  17.                     ,[WorkAudit_PerformerID_Name]
  18.                FROM [CSMAE].[ecm].[WAuditTrail] AS WK2
  19.                WHERE
  20.                  (WK2.WorkAudit_Status=21 OR  WK2.WorkAudit_Status=24) AND  
  21.                   WK2.WorkAudit_PerformerID_Name<>'Admin' AND  
  22.                   WK2.WorkAudit_PerformerID_Name IS NOT NULL  
  23.                  
  24.                ) AS t1
  25.            GROUP BY WorkAudit_WorkID, WorkAudit_Status ,WorkAudit_Task_Title, WorkAudit_PerformerID_Name
  26.       ) AS WK3
  27.       WHERE  
  28.     WK3.WorkAudit_WorkID=WK1.Work_WorkID AND
  29.     WK1.Work_Status=2 AND
  30.     WK1.SubWork_ReturnSubWorkID<>0 AND
  31.     WK1.SubWork_Status=1
  32.    
  33. ORDER BY    WK1.[Work_WorkID],WK1.SubWork_Title, wk3.Fecha_tarea DESC


Los resultados son los siguientes


Work_WorkID ... Fecha_tarea
360846 ... 2014-12-05 15:32:30.000
360846 ... 2014-08-07 14:40:28.000
360846 ... 2014-08-07 14:32:08.000




La DB es un dolor de huevos por la cantidad de tablas que se relacionan para tomar los datos.
La idea es debo mostrar las tareas que estan pendientes y el usuario que la tiene asignada (o sea la ultima fecha).
Por medio de estas consultas consigo los ID de las tareas con las fechas de las mismas pero me trae todo el historial de dichas tareas.
Como se puede ver en la subconsulta de segundo orden busco el máximo de WorkAudit_Date pero no puedo sacar el máximo de la consulta principal (wk3.Fecha_tarea) porque me pide que lo agrupe por dicho campo al final, cosa que no pude hacer.

Alguien sabe como se tendría que hacer para fitrar solo la mayor fecha de cada Work_WorkID de los resultados traidos?

Desde ya, muchas gracias

Última edición por gnzsoloyo; 06/04/2015 a las 13:22
  #2 (permalink)  
Antiguo 06/04/2015, 08:26
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: Tomar el máximo de una serie de consultas

un ejemplo de los datos que tienes contra lo que quieres obtener ayuda mas que solo ver un select que solo tu sabes que regresa......
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 06/04/2015, 13:14
 
Fecha de Ingreso: abril-2015
Ubicación: Buenos Aires
Mensajes: 5
Antigüedad: 9 años
Puntos: 0
Respuesta: Tomar el máximo de una serie de consultas

Gracias por contestar

Tengo los datos

Work_WorkID ... Fecha_tarea

360846 ... 2014-12-05 15:32:30.000
360846 ... 2014-08-07 14:40:28.000
360846 ... 2014-08-07 14:32:08.000
536576 ... 2015-03-31 14:20:41.000
536576 ... 2015-04-01 15:19:41.000
536576 ... 2014-09-11 12:20:54.000




Necesito que me queden los siguientes datos

Work_WorkID ... Fecha_tarea
360846 ... 2014-12-05 15:32:30.000
536576 ... 2015-03-31 14:20:41.000

O sea la fecha mas reciente de cada ID
  #4 (permalink)  
Antiguo 06/04/2015, 14:01
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: Tomar el máximo de una serie de consultas

para hacer lo que necesitas seria algo como esto:

Código SQL:
Ver original
  1. SELECT * FROM tabla1 AS t1
  2. LEFT JOIN (SELECT MAX(fecha) fecha,id FROM tabla1 GROUP BY id) AS t2 ON (t1.id=t2.id AND t1.fecha=t2.fecha)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 07/04/2015, 06:29
 
Fecha de Ingreso: abril-2015
Ubicación: Buenos Aires
Mensajes: 5
Antigüedad: 9 años
Puntos: 0
Respuesta: Tomar el máximo de una serie de consultas

Estoy armando la sentencia para ver si lo consigo.
Te aviso si funciona.
Gracias.
  #6 (permalink)  
Antiguo 07/04/2015, 07:07
 
Fecha de Ingreso: abril-2015
Ubicación: Buenos Aires
Mensajes: 5
Antigüedad: 9 años
Puntos: 0
Respuesta: Tomar el máximo de una serie de consultas

A ver si lo entendí, lo que pusiste como tabla 1 sería el resultado de las consultas anidadas que tengo?
Como haría para que dicho resultado me figure tanto en la primera linea como en la segunda donde estás haciendo el left join?
Perdón la ignorancia y gracias nuevamente.
  #7 (permalink)  
Antiguo 07/04/2015, 07:56
 
Fecha de Ingreso: abril-2015
Ubicación: Buenos Aires
Mensajes: 5
Antigüedad: 9 años
Puntos: 0
Respuesta: Tomar el máximo de una serie de consultas

Mil gracias hermano!!!
Lo solucioné haciendo un Right join de la forma que me indicaste.
Sos lo más.
Abrazos

Etiquetas: select, serie, server, siguiente, sql, tabla, tomar
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:03.