2015-03-20 2 views
-1

Учитывая приведенную ниже таблицу данных, как вы можете показать оценку для этих диапазонов дат: от 3/10 до 3/12?Как получить значение с предыдущего дня в запросе

Формула для оценки - это сегодняшняя оценка = (сегодняшняя средняя цена за билет (2.15))/вчерашний счет. Например, для 3/10 баллов = (126.11 * 2.15) /10.36

Данные хранятся как на сервере Sql, так и на mysql.

symbol tdate  price avg5daysprice score 
----------------------------------------------- 
aapl 3/9/2015 127.14 126.6,   10.36 
aapl 3/10/2015 125.32 126.11   null 
aapl 3/11/2015 128.15 127.25   null 
aapl 3/12/2015 124.48 125.66   null 

ответ

0

КТР решение в Sql Server под кодом

WITH Value_CTE (symbol, tdate,avg5day, scoreAnt) AS (
SELECT symbol, tdate,avg5day, score 
FROM ScoreTable 
WHERE score IS NOT NULL 
YNION ALL 
SELECT B.symbol, B.tdate, B.avg5day, cast(((B.avg5day*2.15)/A.scoreAnt) as decimal(8,2)) as score 
FROM value_CTE A 
INNER JOIN ScoreTable B ON DATEADD(DAY,-1,B.tdate) = A.tdate 
) 
-- Define the outer query referencing the CTE name. 
SELECT symbol, tdate, avg5day, scoreAnt 
FROM value_CTE 

Результат

symbol    tdate  avg5day         scoreAnt 

aapl     2015-03-09 126.60         10.36 
aapl     2015-03-10 126.11         26.17 
aapl     2015-03-11 127.25         10.45 
aapl     2015-03-12 125.66         25.85 
+0

Я получаю ошибку, сохраняя код решения – user3281440

+0

В коде выше используйте U Вместо Y в инструкции YNION ALL, это стало причиной получения ошибки при отправке ответа. – user3281440

1

В SQL Server 2012 можно использовать функцию LAG для доступа к данным из предыдущего ряда. Попробуйте следующее:

SELECT symbol 
     ,tdate 
     ,price 
     ,avg5daysprice 
     ,COALESCE((avg5daysprice * 2.15)/LAG(score, 1, NULL) OVER (ORDER BY tdate), score) AS score 
FROM YourTable 

Для решения кросс-RDBMS я бы пошел с самостоятельным подключением.

+0

Это не будет работать на MySQL. –

+0

Вопрос помечен как sql-server и t-sql. У меня был тот же ответ. – rhholt

+0

Вот обходной путь в MySql из предыдущего сообщения. http://stackoverflow.com/questions/11303532/simulate-lag-function-in-mysql – rhholt