【发布时间】:2010-10-12 17:48:08
【问题描述】:
SQL Server 中的MyTable 包含_TimeStamp、Column1、Column2 和Column3,它们的值如下:
_TimeStamp Column1 Column2 Column3
'2010-10-11 15:55:25.40' 10 3 0.5
'2010-10-11 15:55:25.50' 20 9 0.7
'2010-10-11 15:55:25.60' 15 2 1.3
'2010-10-11 15:55:25.70' 17 8 2.7
'2010-10-11 15:55:25.80' 42 6 3.6
'2010-10-11 15:55:25.90' 14 2 0.4
我想找到 4*Column1*Column2*Column3 的 median 值。每行的产品是:
60
504
156
1468.8
3628.8
44.8
由于有偶数个条目,中值是两个“中间”条目(156 和 504)或 330 的平均值。此外,我只想对落在所选时间范围内的值执行中值,并且该解决方案无法更改不是我的数据库。我编辑了similar query 以获取如下所示的查询,但由于列名无效而失败。有什么建议么?
SELECT
AVG(4*Column1*Column2*Column3)
FROM
(
SELECT
4*Column1*Column2*Column3,
ROW_NUMBER() OVER (
ORDER BY 4*Column1*Column2*Column3 ASC, _TimeStamp ASC) AS RowAsc,
ROW_NUMBER() OVER (
ORDER BY 4*Column1*Column2*Column3 DESC, _TimeStamp DESC) AS RowDesc
FROM MyTable WHERE
_TimeStamp BETWEEN '2010-10-11 15:55:25.40' AND '2010-10-11 15:55:25.90'
) x
WHERE
RowAsc IN (RowDesc, RowDesc - 1, RowDesc + 1)
【问题讨论】:
标签: sql-server median