2017-03-21 60 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()'调用的数据必须非常特别,以返回相同的值。 –