2014-02-14 2 views
0

У меня есть таблица с именем sup_mon:Выберите максимальный идентификатор на материалах на дату

genmat_id mat_name size  Stock_balance  date 
1    aluminum 100 m  25   2014-02-27 
2    aluminum 100 m  30   2014-02-27 
3    steel  100 m  60   2014-02-27 
4    aluminum 100 m  30   2014-02-28 

Вот моя отчетливый запрос на выборку:

select distinct mat_name, Stock_balance, date, max(genmat_id) from sup_mon where date = '2014-02-27' 

Выход был:

genmat_id mat_name size  Stock_balance  date 
     3   steel  100 m  60   2014-02-27 

Как я могу выбрать каждое уникальное имя материала на его самом высоком genmat_id на дату? как:

genmat_id mat_name size  Stock_balance  date 
    2    aluminum 100 m  30   2014-02-27 
    3    steel  100 m  60   2014-02-27 
+0

Вы имеете в виду его высокий 'Stock_balance'? Самый высокий 'genmat_id' будет 4 для алюминия, а не 2, верно? – chiliNUT

ответ

2

Если вы хотите вернуть max(genmat_id) для каждого mat_name и date, то вы можете использовать подзапрос, чтобы получить конечный результат:

select t1.genmat_id, 
    t1.mat_name, 
    t1.size, 
    t1.stock_balance, 
    t1.date 
from yourtable t1 
inner join 
(
    select max(genmat_id) genmat_id, date, mat_name 
    from yourtable 
    group by date, mat_name 
) t2 
    on t1.genmat_id = t2.genmat_id 
    and t1.date = t2.date 
    and t1.mat_name = t2.mat_name 
where t1.date = '2014-02-27'; 

См SQL Fiddle with Demo. Подзапрос возвращает максимальный идентификатор для каждой даты и mat_name, после чего вы присоединяете это обратно к своей таблице на genmat_id, date и mat_name, чтобы получить окончательный результат.

0

Что-то, как это должно работать:

SELECT m1.* 
FROM sup_mon m1 LEFT JOIN sup_mon m2 
ON (m1.mat_name = m2.mat_name AND m1.genmat_id < m2.genmat_id) 
WHERE m2.genmat_id IS NULL and date = '2014-02-27' 

Примечание: адаптировано из this example.

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