0

我有一个我试图从中访问的 SQL 数据库,我需要的是所有术语的平均值,因为每个条目的最大值和最小值之间的差异高于某个阈值。

因此,为了利益,我们有以下内容:

+------------+------+---------+  
|    Date    | Name | Number  |  
+------------+------+---------+  
| 2017-01-03 | Dude | 1000000 |  
| 2017-01-03 | Dude | 2000000 |  
| 2017-01-04 | Dude | 7000000 |  
| 2017-01-04 | Dude | 8750000 |  
+------------+------+---------+  

我现在想取日期 2017-01-03 的平均值,但前提是那天的最大和最小数字之间的差异高于/低于 X。当然我的实际表要大得多,所以删除数据并循环例如,在 VBA 中没有帮助。

我理想的输出是:

+------------+------+---------+  
|    Date    | Name | AVGnum  |  
+------------+------+---------+  
| 2017-01-03 | Dude | X       |  
| 2017-01-04 | Dude | Y       |  
+------------+------+---------+  

其中 X 和 Y 是数字的平均值当且仅当当天的最大值和最小值之间的差值高于指定的 X。

非常感谢!!!!

4

2 回答 2

2

像这样的东西:

select date, name,
       (case when max(num) - min(num) > @X then avg(num) end) as avgnum
from t
group by date, name;

这会将NULLs 放在差异不满足条件的地方。

如果要过滤掉行,请having改用:

select date, name, avg(num) as avgnum
from t
group by date, name
having max(num) - min(num) > @X
于 2018-01-23T14:50:42.537 回答
0

类似于:

SELECT table.Date,
       table.Name,
       AVG(table.number)
  FROM table
 WHERE table.Date = '2017-01-03'
 GROUP BY table.Date,
       table.Name
HAVING MAX(table.Number) - MIN(table.Number) < X
   AND MAX(table.Number) - MIN(table.Number) > X

请注意,在 AVG 计算中只会采用符合条件的数字。

使用“HAVING”,您可以在 GROUP BY 中使用聚合函数。

于 2018-01-23T14:56:37.350 回答