У меня есть набор транзакций, происходящих в определенные моменты времени:
CREATE TABLE Transactions (
TransactionDate Date NOT NULL,
TransactionValue Integer NOT NULL
)
Данные могут быть:
INSERT INTO Transactions (TransactionDate, TransactionValue)
VALUES ('1/1/2009', 1)
INSERT INTO Transactions (TransactionDate, TransactionValue)
VALUES ('3/1/2009', 2)
INSERT INTO Transactions (TransactionDate, TransactionValue)
VALUES ('6/1/2009', 3)
Предполагая, что TransactionValue устанавливает какой-то уровень, мне нужно знать, какой уровень был между транзакциями. Мне это нужно в контексте набора запросов T-SQL, поэтому было бы лучше, если бы я мог получить такой набор результатов:
Month Value
1/2009 1
2/2009 1
3/2009 2
4/2009 2
5/2009 2
6/2009 3
Обратите внимание, как для каждого месяца мы либо получаем значение, указанное в транзакции, либо получаем самое последнее ненулевое значение.
Моя проблема в том, что я мало представляю, как это сделать! Я всего лишь разработчик SQL "промежуточного" уровня, и я не помню, чтобы когда-либо видел что-то подобное раньше. Естественно, я мог бы создавать нужные мне данные в программе или с помощью курсоров, но я хотел бы знать, есть ли лучший, ориентированный на наборы способ сделать это.
Я использую SQL Server 2008, поэтому, если какие-то новые функции помогут, я бы хотел услышать об этом.
P.S. Если кто-то может придумать лучший способ сформулировать этот вопрос или даже лучшую тему, я был бы очень признателен. Мне потребовалось много времени, чтобы решить, что «спред», хотя и хромой, был лучшим, что я мог придумать. «Мазок» звучал хуже.