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)发布于 2010-10-13 01:55:37
我认为您需要对候选语句执行的所有操作就是在子查询中为计算值设置别名,然后在外部查询中请求该别名的AVG:
SELECT
AVG(MyValue)
FROM
(
SELECT
4*Column1*Column2*Column3 AS MyValue,
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)不过,我还没有测试过这个。
https://stackoverflow.com/questions/3917518
复制相似问题