Взятие медианы расчета в SQL Server - PullRequest
1 голос
/ 12 октября 2010

MyTable в SQL Server содержит _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* Столбец2 * Column3.Продукты для каждой строки:
60
504
156
1468,8
3628,8
44,8
Поскольку число записей четное, среднее значение представляет собой среднее значениедве «средние» записи (156 и 504), или 330. Также я хочу выполнить медиану только для значений, которые попадают в выбранный временной диапазон, и решение не может изменить базу данных, которая не принадлежит мне.Я отредактировал аналогичный запрос , чтобы получить запрос, показанный ниже, но он не выполняется, поскольку имя столбца неверно.Какие-либо предложения?

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)

1 Ответ

1 голос
/ 12 октября 2010

Я думаю, что все, что вам нужно сделать с заявлением о кандидате, это присвоить псевдониму вычисленное значение в подзапросе, а затем запросить 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)

Я еще не проверял это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...