SQL Server отображает исторические данные - PullRequest
0 голосов
/ 27 ноября 2011

Я использую SQL Server 2005. У меня есть таблица с именем Product. Теперь мне нужно узнать цену товара на данный месяц. Какой бы ни была цена товара в конце месяца, на самом деле это цена. Чтобы сделать сценарий более понятным, у меня есть пример ниже:

CREATE TABLE Product(ProductID int, Product Varchar(50), Price Decimal(5,2), FromDate DateTime, ToDate Datetime);

Данные могут выглядеть следующим образом:

INSERT INTO Product(ProductID, Product, Price, FromDate, ToDate)
SELECT 1,Pen,2.99,'01/15/2011','03/25/2011'
UNION
SELECT 2,Pen,3.99,'03/25/2011','05/02/2011'
UNION
SELECT 3,Pen,4.99,'05/02/2011',NULL

Теперь здесь текущая цена Pen равна 4.99, потому что ее ToDate по-прежнему нулевая. Сейчас цена пера составляет 2,99 в месяце январь и февраль. 25 марта цена ручки изменена на 3,99, поэтому цена ручки в марте составляет 3,99. Цена на ручку снова изменилась в мае до 4,99. Таким образом, цена пера в мае и вперед - май.

Теперь мне нужно написать скрипт sql, который даст мне цену продукта за данный месяц. Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 27 ноября 2011
    SELECT * From Product where @monthenddate 
between FROMDATE and isNUll(TODate,get date())

Я оставлю вам расчет даты окончания месяца

0 голосов
/ 27 ноября 2011

Следующее будет работать, но вы должны заметить, что если ввод 5/02/2011, то цена будет 4,99.Если вы хотите, чтобы он был 3,99, просто измените операторы сравнения на <и> =

Select price  
From
          Product
 Where
          Product = 'Pen'
          And fromdate <= @inputDate
      And (todate > @inputDate or todate is null)

См. Data.SE

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