【发布时间】:2012-04-13 18:51:19
【问题描述】:
我正在解决查找平均处理时间的问题。我试图通过只对最好的 80% 数据进行平均来消除异常数据。
我正在努力调整现有的每组前 N 个解决方案以执行每组平均。使用 SQL Server 2008。
这是表格的示例:
OpID | ProcessMin | Datestamp
2 | 234 | 2012-01-26 09:07:29.000
2 | 222 | 2012-01-26 10:04:22.000
3 | 127 | 2012-01-26 11:09:51.000
3 | 134 | 2012-01-26 05:02:11.000
3 | 566 | 2012-01-26 05:27:31.000
4 | 234 | 2012-01-26 04:08:41.000
我希望它为 每个 OpID 取 ProcessMin 的最低 80%,并取该数组的平均值。任何帮助将不胜感激!
* 更新 *
给定下表:
OpID ProcessMin Datestamp
602 33 46:54.0
602 36 38:59.0
602 37 18:45.0
602 39 22:01.0
602 41 36:43.0
602 42 33:00.0
602 49 03:48.0
602 51 22:08.0
602 69 39:15.0
602 105 59:56.0
603 13 34:07.0
603 18 07:17.0
603 31 57:07.0
603 39 01:52.0
603 39 01:02.0
603 40 40:10.0
603 46 22:56.0
603 47 11:03.0
603 48 40:13.0
603 56 25:01.0
我希望这个输出:
OptID ProcessMin
602 41
603 34.125
请注意,由于每个 OpID 有 10 个数据点,它只会平均最低的 8 个值 (80%)。
【问题讨论】:
-
这只是另一个子查询,用更多的样本数据向我们展示预期的结果。归根结底,它只是 opid 的一个组
-
@JonH -- 我添加了更多样本和输出作为上面的示例。我尝试做一个子查询,但我没有设置逻辑使得 Top 适用于每个 OpID 的 ProcessMin 集,而不是整个表。抱歉,这可能是一个新手错误。我认为这可能可以通过分区来完成,但我的尝试没有成功。
标签: sql-server-2008 group-by average top-n