2014-10-26 2 views
-1

У меня есть таблица для записи ежедневной цены у разных поставщиков. Моя цель - найти лучшего (низкая цена) поставщика. Структура таблицы Название таблицы: Lab1 Колонки: ID, PRODUCT_ID, Price_date, Цена, ПоставщикПоказаны отличительные значения с агрегатами

----------------------------------------------------------------------------------- 
ID Product_ID Price_date Price Supplier 
-------------------------------------------------------------------------------------- 
1 8   26-10-2014 1300 SP1 
2 8   05-10-2014 1600 SP2 
3 8   15-10-2014 1300 SP1 
4 8   14-12-2014 1200 SP3 
------------------------------------------------------------------------------------------ 

Создание структуры таблицы

CREATE TABLE clickpic_pricecompare.lab1 (
    ID int(11) NOT NULL AUTO_INCREMENT, 
    Product_ID int(11) DEFAULT NULL, 
    Price_Date date DEFAULT NULL, 
    Price decimal(19, 2) DEFAULT NULL, 
    Supplier varchar(255) DEFAULT NULL, 
    PRIMARY KEY (ID) 
) 
ENGINE = MYISAM 
COMMENT = 'testing-purpose'; 

INSERT INTO lab1(ID, Product_ID, Price_Date, Price, Supplier) VALUES 
(1, 8, '2014-10-26', 1300.00, 'SP1'); 
INSERT INTO lab1(ID, Product_ID, Price_Date, Price, Supplier) VALUES 
(2, 8, '2014-10-05', 1600.00, 'SP2'); 
INSERT INTO lab1(ID, Product_ID, Price_Date, Price, Supplier) VALUES 
(3, 8, '2014-10-15', 1300.00, 'SP1'); 
INSERT INTO lab1(ID, Product_ID, Price_Date, Price, Supplier) VALUES 
(4, 8, '2014-10-14', 1200.00, 'SP3'); 

Я НУЖЕН РЕЗУЛЬТАТ ВЫГЛЯДИТ КАК НИЖЕ

-------------------------------------------------------------------------------------- 
ID Product_ID Month Price Supplier 
-------------------------------------------------------------------------------------- 
4 8   October 1200 SP3 
------------------------------------------------------------------------------------------- 

Пожалуйста, помогите ...

+0

Вы написали даты назад к передней панели для нашего удобства? Я не считаю это удобным! – Strawberry

ответ

1

Вы можете использовать автообъединение с идентификатором продукта и минимальным количеством цены, чтобы получить низкую цену строку на идентификатор продукта

select l.ID, 
l.Product_ID, 
monthname(l.Price_Date) `Month`, 
l.Price, 
l.Supplier 
from lab1 l 
join (select Product_ID,min(Price) Price 
    from lab1 
    group by Product_ID) l1 
using(Product_ID,Price) 

DEMO

+0

Дорогой Халид, это мне очень помогло. Но если я введу некоторые данные в сентябре с низким значением, то он будет показывать только самое низкое значение этого месяца ... есть ли способ показать самую низкую цену за месяц? также обратите внимание, что поставщик находится на другой таблице, называемой поставщиком. –

+0

@riyasrawther 'обратите внимание, что поставщик находится на другой таблице' er, no is not – Strawberry

+0

@RiyasRawther вы можете обновить свой вопрос в соответствии с вашими потребностями? с также набор данных выборки –

0
select temp2.id, 
     temp2.Product_ID, 
     DATENAME(month, temp2.Price_Date) AS MONTH, 
     temp1.Min_Price, 
     temp2.Supplier 
from 
(
    select Product_ID, min(Price) as Min_Price 
    from lab1 
    group by Product_ID 
) as temp1 
inner join 
lab1 temp2 
on temp1.Product_ID = temp1.Product_ID 
and temp1.Min_Price = temp2.Min_Price 
+0

очень близко - крошечная ошибка – Strawberry

+0

Я использую этот sql ... но только показывает самое низкое значение каждого продукта всего за один месяц ... –

0

Я думаю, что вы ищете:

выберите l.ID, l.Product_ID, MonthName (l.Price_Date) в качестве Month, l.Price, l.Supplier

from lab1 l join 
    (select Product_ID, year(l.Price_date) as yr, month(l.Price_Date) as mon, min(Price) as Price 
     from lab1 
     group by Product_ID, year(l.Price_date), month(l.Price_Date) 
    ) lmin 
    on l.Product_id = lmin.Product_id and 
     year(l.Price_Date) = lmin.yr and 
     month(l.Price_Date) = lmin.mon; 

Если вы хотите только данные за октябрь, а затем добавить where пункт:

where l.Price_Date >= '2014-10-01' and l.Price_Date < '2014-11-01' 
Смежные вопросы