2017-03-21 12 views
0

나는 한 기간 동안 평균을하려고합니다 (예 : 지난 6 개월, 지난 달, 지난 주 ...).기간 동안 평균을 계산하려면 어떻게해야합니까?

나는 4 개의 검색어를 만들었습니다. 내가 명확하게 할 수 있을까?

/** ON SELECTED DATE*/ 
SELECT AVG(RUN_TIME) 
FROM (SELECT (DATEDIFF(minute,MIN(CAST(START_DATE AS DATETIME)), MAX(CAST(END_DATE AS DATETIME)))) as RUN_TIME FROM TableTest where DATE_EXPECTED = DATE_SELECTED) f 

/**ON 6 last month*/ 
SELECT AVG(RUN_TIME) 
FROM (SELECT (DATEDIFF(minute,MIN(CAST(START_DATE AS DATETIME)), MAX(CAST(END_DATE AS DATETIME)))) as RUN_TIME FROM TableTest 
where Month(CAST(DATE_SELECTED AS DATETIME)) BETWEEN Month(CAST(DATE_SELECTED AS DATETIME)) AND Month(CAST(DATE_SELECTED AS DATETIME))+6) f 

/** on 30 last days */ 
SELECT AVG(RUN_TIME) 
FROM (SELECT (DATEDIFF(minute,MIN(CAST(START_DATE AS DATETIME)), MAX(CAST(END_DATE AS DATETIME)))) as RUN_TIME FROM TableTest where DATE_EXPECTED between DATE_SELECTED and DATE_SELECTED+30) f 

/* on 5 last days */ 
SELECT AVG(RUN_TIME) 
FROM (SELECT (DATEDIFF(minute,MIN(CAST(START_DATE AS DATETIME)), MAX(CAST(END_DATE AS DATETIME)))) as RUN_TIME FROM TableTest where DATE_EXPECTED between DATE_SELECTED and DATE_SELECTED+5) f 

작동하지만 최선의 방법으로이 작업을 수행 할 수 있는지 알고 싶습니다.

감사합니다,

+0

예, 평균 싶습니다. 나는 아직도 배우고있다 : 나는 AVG를 평균해서는 안된다? – Bob

+0

날짜가있는 바로 가기 사용에 대해이 기사를 살펴보아야합니다. http://sqlblog.com/blogs/aaron_bertrand/archive/2011/09/20/bad-habits-to-kick-using-shorthand-with-date-time-operations.aspx –

답변

2

조건부 집계를 사용할 수 있습니다

SELECT AVG(CASE WHEN DATE_EXPECTED = DATE_SELECTED THEN RUN_TIME END) as avg_1, 
     AVG(CASE WHEN Month(CAST(DATE_SELECTED AS DATETIME)) BETWEEN Month(CAST(DATE_SELECTED AS DATETIME)) AND Month(CAST(DATE_SELECTED AS DATETIME))+6 THEN RUN_TIME END) as avg_2, 
     AVG(CASE WHEN DATE_EXPECTED between DATE_SELECTED and DATE_SELECTED+30 THEN RUN_TIME END) as avg_3, 
     AVG(CASE WHEN DATE_EXPECTED between DATE_SELECTED and DATE_SELECTED+5 THEN RUN_TIME END) as avg_4 
FROM (SELECT (DATEDIFF(minute,MIN(CAST(START_DATE AS DATETIME)), MAX(CAST(END_DATE AS DATETIME)))) as RUN_TIME 
     FROM TableTest 
    ) f; 
+0

동일한 결과가 없습니다. 내 다른 쿼리로. 나는 모든 평균에 대해 같은 결과를 보았습니다. (그럴 필요는 없습니다) – Bob

+0

@FannyV. . . 데이터는이 네 가지'avg()'호출이 동일한 값을 반환하도록 매우 특수해야합니다. –