2017-03-21 14 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。 。 。これらの4つの 'avg()'呼び出しが同じ値を返すためには、データは非常に特殊なものでなければなりません。 –

関連する問題