2013-05-03 86 views
1

我想获得与s.SR_Service_RecID关联的t.Notes,它具有最近的t.Date_Startt.Time_Start - 由于在单个日期对单张票可能有多个时间条目,所以我需要包含也是获得最新单一结果的时间。获取最大日期和最大时间

DECLARE @SD DATETIME, 
     @ED DATETIME  

SET  @SD = DATEADD(dd, -14, GETDATE()) 
SET  @ED = GETDATE() 

SELECT s.SR_Service_RecID 
    , t.Notes 

    FROM SR_Service s 
     LEFT JOIN Time_Entry t 
       ON t.SR_Service_RecID = s.SR_Service_RecID 

WHERE s.Date_Closed BETWEEN @SD AND @ED 

我曾尝试在WHERE子句中2子查询,一个用于t.Date_Start和一个用于t.Time_Start,只选择MAX的结果,但它会限制由于某种原因,结果会有缺少的条目。 ..可能不是正确的路要走?

AND t.Date_Start IN 
     (
      SELECT MAX(t.Date_Start) 
       FROM Time_Entry t 
      WHERE t.SR_Service_RecID = s.SR_Service_RecID 
     ) 
    AND t.Time_Start IN 
     (
      SELECT MAX(t.Time_Start) 
       FROM Time_Entry t 
      WHERE t.SR_Service_RecID = s.SR_Service_RecID 
     ) 
+1

请您提供表格定义和样品数据。 – 2013-05-03 00:59:35

回答

1

我认为这应该是接近。神秘之处在于如何将您单独日期和时间的任何数据类型合并为一个DateTime值。这留给了OP的练习。

select * 
    from (
    select s.SR_Service_RecID, t.Notes, t.Date_Start, t.Time_Start, 
     Row_Number() over (partition by s.SR_Service_RecID order by <combined date/time> desc) as [RN] 
     from SR_Service as s left outer join 
     Time_Entry as t on t.SR_Service_RecID = s.SR_Service_RecID 
     where @SD <= s.Date_Closed and s.Date_Closed <= @ED 
    ) as Bob 
    where RN = 1 
0

使用子查询与关键字EXISTS .The WHERE外部查询测试的条款是否由子查询返回的行存在。

SELECT s.SR_Service_RecID, t.Notes 
FROM SR_Service s LEFT JOIN Time_Entry t ON t.SR_Service_RecID = s.SR_Service_RecID 
WHERE s.Date_Closed BETWEEN @SD AND @ED 
AND EXISTS (
      SELECT 1 
      FROM Time_Entry t2 
      WHERE s.SR_Service_RecID = t2.SR_Service_RecID 
      HAVING MAX(CAST(t2.Date_Start AS datetime) + t2.Time_Start) 
       = CAST(t.Date_Start AS datetime) + t.Time_Start 
      )