2011-12-29 5 views
1

내가 시간과 분에서 "ProcessTime"를 얻을이 SQL 쿼리를 개선하기 위해,하지만 초의 경우에 나는 반대 상태를 확인 만어떻게 여기

것을 개선하기 위해 어떤 방법이 있나요 (아래 코드 참조)?

select convert(varchar(10),ScanDate,101) as [Date], tmb.WO, tc.WOCategory, count(IdSingle) QtyProd, tb.Brand, tm.Model, 
     (case when (DateDiff(mi, Min(convert(varchar(10),ScanDate,8)), Max(convert(varchar(10),ScanDate,8)))/60%24 > 0) then 
      convert(varchar(5), DateDiff(mi, Min(convert(varchar(10),ScanDate,8)), Max(convert(varchar(10),ScanDate,8)))/60%24) + 'h '    
       else 
      '' 
     end) + 
     (case when (DateDiff(mi, Min(convert(varchar(10),ScanDate,8)), Max(convert(varchar(10),ScanDate,8)))%60 > 0) then 
      convert(varchar(5), DateDiff(mi, Min(convert(varchar(10),ScanDate,8)), Max(convert(varchar(10),ScanDate,8)))%60) + 'm'    
       else 
      '' 
     end) +   
     (case when 
      (DateDiff(mi, Min(convert(varchar(10),ScanDate,8)), Max(convert(varchar(10),ScanDate,8)))/60%24 <= 0) and 
      (DateDiff(mi, Min(convert(varchar(10),ScanDate,8)), Max(convert(varchar(10),ScanDate,8)))%60 <= 0) then 
      '< 1 min' 
      else 
      '' 
     end) ProcessTime 
+0

를 사용하는 SQL의 버전은 무엇? – Hogan

+0

후회, SQL 서버 2005 죄송합니다. – Somebody

답변

1

SQL Server 2005에서는 CTE를 사용하여이 쿼리를 향상시킬 수 있습니다. 이 같은
뭔가 : 당신이

;WITH minmax AS 
(
    SELECT someKey, 
      DateDiff(mi, Min(convert(varchar(10),ScanDate,8)), Max(convert(varchar(10),ScanDate,8))) as mdiff 
    FROM tablename 
    GROUP BY fieldName 
) 
Select convert(varchar(10),ScanDate,101) as [Date], tmb.WO, tc.WOCategory, count(IdSingle) QtyProd, tb.Brand, tm.Model, 
     (case when (mdiff/60%24 > 0) then 
      convert(varchar(5), mdiff/60%24) + 'h '    
       else 
      '' 
     end) + 
     (case when (mdiff%60 > 0) then 
      convert(varchar(5), mdiff%60) + 'm'    
       else 
      '' 
     end) +   
     (case when 
      (DateDiff(mi, mdiff/60%24 <= 0) and (DateDiff(mi, mdiff%60 <= 0) then 
      '< 1 min' 
      else 
      '' 
     end) ProcessTime 
from tablename 
join minmax on tablename.somekey = minmax.somekey 
+0

humm ... 흥미 롭습니다, 감사합니다. – Somebody

+0

개선 할 다른 방법이 있다고 생각하지만 회의를해야합니다 ... – Hogan