2012-04-11 2 views
-2

Привет дорогие друзья SO.Как я могу достичь этого запроса в MySQL

У меня есть эти таблицы:

коштовного

+---------+--------+-----------+-------------+------------+ 
| priceID | itemID | priceCash | pricePoints | priceDate | 
+---------+--------+-----------+-------------+------------+ 
|  1 |  1 |  30.00 |   90 | 2012-03-05 | 
|  2 |  2 |  40.00 |   120 | 2012-03-05 | 
|  6 |  2 |  50.00 |   50 | 2012-03-07 | 
|  7 |  2 |  55.00 |   50 | 2012-03-07 | 
+---------+--------+-----------+-------------+------------+ 

ПУНКТЫ

+--------+----------------------+-------------+------------+----------+---------------+---------------+ 
| itemID | itemName    | itemWarning | itemUrgent | itemType | itemVipPoints | itemExistence | 
+--------+----------------------+-------------+------------+----------+---------------+---------------+ 
|  1 | Lubricante Orgasmix |   20 |   10 |  2 |    3 |   300 | 
|  2 | Anillo Vibrador  |   50 |   50 |  2 |   50 |   120 | 
|  3 | Crema Chantilly  |   5 |   20 |  1 |    0 |   500 | 
|  4 | Caribe Cooler  |   10 |   4 |  1 |    0 |   100 | 
|  5 | Cacahuates Japoneses |   20 |   10 |  1 |    0 |   400 | 
|  6 | Cerveza Sol (lata) |   12 |  112 |  1 |    0 |   200 | 
|  7 | Chocolate derretido |   20 |   10 |  1 |    0 |   200 | 
+--------+----------------------+-------------+------------+----------+---------------+---------------+ 

Мне нужно, чтобы получить таблицу, как это:

  • ItemType должен быть '2'
  • Itemid требуется
  • ITEMNAME требуется
  • priceCash требуется
  • itemExistence должно быть> 0

Но главная проблема (для меня) является что мне нужно получить ПОСЛЕДНЮЮ priceCash для каждого уникального элемента.

Например, как вы можете видеть, itemID = 2 имеет три цены. Мне нужно, чтобы в этом случае таблица показала только последнюю (55.00).

Итак, вкратце: мне нужно, чтобы получить это:

+--------+---------------------+-----------+ 
| itemID | itemName   | priceCash | 
+--------+---------------------+-----------+ 
|  1 | Lubricante Orgasmix |  30.00 | 
|  2 | Anillo Vibrador  |  55.00 | 
+--------+---------------------+-----------+ 

Но мой лучший результат что-то вроде этого :(

+--------+---------------------+-----------+ 
| itemID | itemName   | priceCash | 
+--------+---------------------+-----------+ 
|  1 | Lubricante Orgasmix |  30.00 | 
|  2 | Anillo Vibrador  |  40.00 | 
|  2 | Anillo Vibrador  |  50.00 | 
|  2 | Anillo Vibrador  |  55.00 | 
+--------+---------------------+-----------+ 

Я опрокинется 5USD на Апр 15 через PayPal тому, кто может мне помочь на этом :) Обещай.

РЕШЕНИЕ

При условии добросердечно Кая

select it.itemID, it.itemName, p.priceCash 
from items it 
    inner join precios p on p.itemID = it.itemID 
    inner join (select itemID, max(priceID) latestPriceID 
       from precios 
       group by itemID) latestPrice on latestPrice.itemID = p.itemID and latestPrice.latestPriceID = p.priceID 
where it.itemType = 2 
    and it.itemExistence > 0 

Для тех, кто против, это о базе данных для мотеля, где они продают все рода вещи для сексуального удовольствия.

Спасибо.

+0

сообщение запроса вы пробовали .. – Teja

+2

К сожалению, мои ставки начинаются от $ 100/час. Это не место, чтобы получить помощь фрилансера. Для этого есть и другие сайты. – Cfreak

+3

Cmon, со значениями столбцов, такими как 'Lubricante Orgasmix' и' Anillo Vibrador', которые могли бы сопротивляться? –

ответ

2

Учитывая, что у вас есть дубликат priceDates для itemID = 2 Я предполагаю, что самую последнюю цену можно определить, используя priceID. Таким образом, в основном вам нужен запрос, чтобы найти самую последнюю цену за элемент, а затем извлечь соответствующую цену в этот момент.

Нечто подобное должно работать:

select it.itemID, it.itemName, p.priceCash 
from items it 
    inner join precios p on p.itemID = it.itemID 
    inner join (select itemID, max(priceID) latestPriceID 
       from precios 
       group by itemID) latestPrice on latestPrice.itemID = p.itemID and latestPrice.latestPriceID = p.priceID 
where it.itemType = 2 
    and it.itemExistence > 0 
+0

Не будет «ПОСЛЕДНИЙ priceCash» на MAX (priceDate), а не ID? Согласны, данные в вопросе подозрительны, так как мы в идеале хотим иметь точность времени, чтобы правильно упорядочить заказ. –

+0

Не, если - как я уже сказал во введении к запросу - для одной позиции для одной и той же даты есть две записи - посмотрите на строки priceID 6 и 7 - как для itemID = 2, так и для даты 2012-03-07. Да, как правило, вы бы использовали дату, но здесь это кажется не ... – kaj

+0

Kaj, его рабочий :) спасибо! Пожалуйста, предоставьте мне электронную почту, где я могу отправить вам совет, который я обещал. Я сделаю это 15 апреля. Через 4 дня. –

-1
select x.itemID, x.itemName, y.priceCash from items x, precios y 
WHERE itemType=2 and x.itemID=y.itemID and x.itemExistence > 0 
and y.priceID = (select max(t.priceID) from precios t where x.itemID=t.itemID) 
group by x.itemID order by y.priceDate; 
+1

пустым голосам следует подумать о добавлении комментария. – kasavbere

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