2010-11-25 3 views
0

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

Чтобы уточнить, creationdateformat имеет следующие даты в нем:

creationdateformat 
2010-10-25 
2010-10-26 
2010-11-10 
2010-11-24 
2010-11-25 

skucompetition имеет следующие цены на него:

sku    creationdate   price 
PCR-BR2495112 2010-10-26 16:06:03 24.99 
PCR-BR2495112 2010-11-10 13:01:43 27.99 
PCR-BR2495112 2010-11-25 12:24:26 26.51 

На сегодняшний день 2010-10-25 она должна возвращать 0, как это было до того, как существовала первая цена.

На сегодняшний день 2010-10-26 он должен вернуть 24,99

На сегодняшний день 2010-11-10 и 2010-11-24 она должна возвращать 27.99

На сегодняшний день 2010-11-25 его должен вернуться 26.51

И так далее.

Как это можно достичь?

+0

Я не понимаю ваш пример. Все даты в вашем примере запроса также находятся в `createdateformat`. Какова цель этой таблицы? – vy32 2010-11-25 13:56:12

+0

Нет, не все. 2010-11-24 здесь нет. Я сделаю это более ясным. – skerit 2010-11-25 14:02:09

ответ

1

Это должно указывать вам в правильном направлении ...

Судя по вашим данным выборки, вы ищете для записи либо последнего до или на определенной даты.

Вас интересует только одна запись, поэтому вы должны указать limit свой выбор на первую запись.

Вы можете упростить до или на участке. Все, что угодно «до или сегодня», такое же, как «до завтра». Таким образом, вы будете искать что-нибудь «до даты ввода plus one day». Это упрощает запрос, потому что вам не придется беспокоиться о точном времени суток.

Наконец, чтобы убедиться, что вы получили последние записи, вам нужно будет записать order записей.

В псевдокоде это будет:

select the first record 
from skucompetition 
where creationdate is before (input date + one day) 
order by creationdate so most recent record comes first 

Вы должны обработать особый случай возвращения 0 в вашем приложении. Если вы правильно построили запрос, он не будет соответствовать ни одной записи для дат ввода до первой даты. Именно тогда ваше приложение должно обрабатывать случай «return 0».

0

Я хотел бы создать запрос, который:

  • выбирает все записи с CreationDate или позже, чем дата вы смотрите на
  • порядке тех, от самых ранних до последней
  • , а затем использовать «предел», чтобы вернуть только первую запись

точный синтаксис, конечно, будет зависеть от того, который вы используете RDBMS

+0

с тегами `mysql`. – Danosaure 2010-11-25 15:25:56

0
SELECT price FROM skucompetition 
WHERE sku = "<sku>" AND DATE(creationdate) <= "<date>" 
ORDER BY date DESC LIMIT 1 

Это позволит выбрать первую запись с правильным SKU, который не старше «даты». Если их нет, возвращается NULL.

+0

`2010-10-26 16:06:03 <=" 2010-10-26 «` возвращает `0`, что не то, о чем просит ОП. – Danosaure 2010-11-25 15:29:11

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