2015-02-09 4 views
0

У меня есть таблица с ценами на некоторые товары, зарегистрированных для некоторых дат, таких как:Выберите строки на основе значения приблизительная

 2014-01-10      $120 
        2014-01-11      $121 
        2014-01-13      $119 
        2014-01-15      $118 

Я хотел бы создать представление, которое будет заполнить недостающие цены, т.е. , процитировать существующие цены, где доступны, и вернуть последнюю известную цену, если цена на определенный день неизвестно, возможно, с разумным пределом в случае, если продукт исчезает с рынка:

2014-01-10      $120 
    2014-01-11      $121 
    2014-01-12      $121 
    2014-01-13      $119 
    2014-01-14      $119 
    2014-01-15      $118 
    2014-01-16      $118 
    2014-01-17      $118 
    2014-01-18      $118 
    .......... 
    2014-02-01      NULL 

Если бы это было просто вопрос вычисления цены один раз, I , вероятно, будет использовать функцию для этого, но мне нужно позже объединить цифры с данными из других таблиц с датой, являющейся общим полем .

2014-01-10      $120    data a 
    2014-01-11      $121    data b 
    2014-01-12      $121    data c 
    2014-01-13      $119    data d 
    2014-01-14      $119    data e 
    2014-01-15      $118    NULL 
    2014-01-16      $118    NULL 
    2014-01-17      $118    data f 
    2014-01-18      $118    data g 

Обычно, на 12, 14, и после 15-го, поле цены будет возврата NULL, который я хочу, чтобы избежать, как это разрушило бы расчеты, которые использовать данные позже.

Если вы считаете, что вид строительство не является лучшим решением здесь, я был бы благодарен за указание мне в правильном направлении - как вы можете видеть, базы данных не поле моей глубочайшей экспертизы. ;)

+0

Честно говоря, на данный момент у меня даже нет идеи, как подойти к проблеме. Мои знания SQL не намного глубже, чем базовый выбор, вставка и создание вида с помощью select. – Jasio

+0

Я думаю, что было бы лучше сделать запрос, который возвращает null, когда значение не будет найдено, а затем заполнить значения в логике приложения. Так или иначе, вы собираетесь перебирать данные. Сортировка по дате и захват цены из каждой строки, когда она не равна нулю. Когда вы увидите нулевое значение, поменяйте его на последнее, которое вы видели. – JustinDanielson

+1

У вас есть таблица всех дат? –

ответ

0

Если у вас есть список всех дат, которые вам небезразличны, то вы можете использовать коррелированный подзапрос, чтобы получить цену:

select d.*, 
     (select p.price 
     from prices p 
     where p.date <= d.date 
     order by p.date desc 
     limit 1 
     ) as price 
from dates d; 

Это MySQL вид, совместимый - подзапрос в предложении select, а не в предложении from.

+0

Ничего себе ... это работает. :) Мне потребовалось некоторое время, чтобы понять, как это работает, но потом мне удалось расширить его, включив в него также и тип продукта. Теперь у меня есть кое-что, чтобы сработать. Благодарю. – Jasio

Смежные вопросы