Поиск StartDate, EndDate из переопределения StartDates - PullRequest
1 голос
/ 02 апреля 2012

У меня есть две таблицы со следующими (упрощенными) структурами:

  1. таблица "Факторы", которая содержит данные о факторах приобретенного товара и имеет следующие столбцы:

    FactorSerial, PurchaseDate, купленный товар

  2. таблица "Цены", которая содержит цены на товары на разные даты

    Серийный, GoodCode, EvaluationDate, Цена

Цена действительна до тех пор, пока не будет добавлена ​​новая строка с тем же кодом, но другой датой, и, таким образом, обновится ее значение.

Теперь я хочу создать таблицу, которая добавляет цену к таблице 1 в соответствии с покупкой.Дата.Так что если у нас есть:

  PurchaseDate  PurchasedGood
 -----------------------------
  05/20/2011      A111

и:

  GoodCode  EvaluationDate  Price
 --------------------------------
   A111      02/01/2011     100
...
   A111      04/01/2011     110
...
   A111      06/01/2011     120

результат будет

  PurchaseDate  PurchasedGood  Price
 -----------------------------------
  05/20/2011      A111          110

Предпочтительным методом является создание представления цен1 как

 Serial  GoodCode   StartDate  EndDate  Price

и затем присоединение Факторов с этим представлением к

  PurchasedDate between StartDate AND EndDate

Кто-нибудь может показать мне, как создать представление1 (или получить конечный результат любым другим методом)?Заранее спасибо!

PS извините за мой плохой английский!

1 Ответ

0 голосов
/ 02 апреля 2012

Я хочу создать таблицу, которая добавляет цену к таблице 1 в соответствии с датой покупки.

Вот запрос, который возвращает такие данные.Я полагаю, что синтаксис довольно стандартный SQL, но это было проверено на SQL Server (похоже, вы используете PostgreSQL с вашим «последовательным» наименованием).

select a.FactorSerial, a.PurchasedGood, a.PurchaseDate
    , (select max(Price) from Prices where GoodCode = a.PurchasedGood and EvaluationDate = a.EvaluationDate) as Price
from (
    select f.FactorSerial, f.PurchasedGood, f.PurchaseDate, max(p.EvaluationDate) as EvaluationDate
    from Factors as f
        join Prices as p on f.PurchasedGood = p.GoodCode
    where f.PurchaseDate >= p.EvaluationDate
    group by f.FactorSerial, f.PurchasedGood, f.PurchaseDate
) as a

В этом запросе предполагается, что нет покупокдо появления цены.

Кроме того, учитывая:

Предпочтительным методом является создание представления Цены1 как

Serial  GoodCode   StartDate  EndDate  Price

, а затем присоединение Факторов с этим представлением с помощью

 PurchasedDate between StartDate AND EndDate

between включительно.Используя описанный вами метод, вы получите дубликаты, если PurchaseDate лежит на EndDate одной строки и StartDate другой.

...