【问题标题】:How can I calculate average during a period?如何计算一段时间内的平均值?
【发布时间】:2017-03-21 16:44:22
【问题描述】:

我试图在一段时间内获得平均值(例如:过去 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

它正在工作,但我想知道我是否能以最好的方式做这件事。

谢谢,

【问题讨论】:

标签: sql sql-server average period


【解决方案1】:

您可以使用条件聚合:

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;

【讨论】:

  • 我的不同查询没有相同的结果。我对所有平均值都有相同的结果(而且不应该)
  • @FannyV 。 . .对于这四个avg() 调用,数据必须非常特殊才能返回相同的值。
猜你喜欢
  • 2021-08-05
  • 1970-01-01
  • 1970-01-01
  • 2019-08-01
  • 2020-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-25
相关资源
最近更新 更多