2016-05-13 1 views
1

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

item date  licence plate number 
1  13.5.2016 abc-123 
2  13.5.2016 abc-123 
3  10.5.2016 xyz-567 
1  20.4.2016 abc-123 
2  20.4.2016 abc-123 
6  10.5.2016 xyz-567 

Однако я бы хотел получить самую последнюю отправку, исходя из номера номерного знака. Разыскиваемый выход будет выглядеть

item date  licence plate number 
1  13.5.2016 abc-123 
2  13.5.2016 abc-123 
3  10.5.2016 xyz-567 
+1

Какие dbms вы используете? –

+0

Определите «последние», тогда мы можем вам помочь. Что включает пункт 3, но пункт 6 исключен? – Andreas

+0

Какая СУБД вы используете? –

ответ

3

Вы можете использовать следующий запрос:

SELECT t1.* 
FROM mytable AS t1 
JOIN (
    SELECT item, MAX("date") AS "date" 
    FROM mytable 
    GROUP BY item 
) AS t2 ON t1.item = t2.item AND t1."date" = t2."date" 

запрос использует производную таблицу, которая выбирает последнюю дату каждого item. Используя эту производную таблицу, мы можем выбрать запись, соответствующую этой дате.

0

Может быть, это помогает:

SELECT TOP 10 --change 10 to any desired number to be viewed 
* 
FROM YourDatabaseName 
ORDER BY Date DESC 
+0

Не то, о чем просит ОП. (И конкретный продукт для ответа на вопрос без тегов, отмеченных dbms.) – jarlh

0

Вы должны сначала найти нашу максимальную дату каждого номера пластины затем соединить таблицы.

Вы можете использовать нижеследующий запрос.

select t2."item",t1."date",t1."licence plate number" from (
(select max("date") as date, "licence plate number" from Table_1 group by 
"licence plate number")) t1 
left join Table_1 t2 
on (t1."date" = t2."date" and t1."licence plate number" = t2."licence plate number") 

Результат этого запроса будет.

1  2016-05-13  abc-123 
2  2016-05-13  abc-123 
3  2016-05-10  xyz-567 
6  2016-05-10  xyz-567 
+0

Обратите внимание, что квадратные скобки для идентификаторов с разделителями являются специфичными для продукта, и вопрос не содержит тегов с dbms. ANSI SQL имеет двойные кавычки, например. ' "Пункт"'. (MS SQL Server фактически поддерживает обе версии.) – jarlh

+0

Спасибо bro .. @jarlh –

1

Ниже стандарт SQL поддерживается в широком диапазоне СУБД:

select item, date, licence_plate_number 
from (
    select item, date, licence_plate_number, 
      row_number() over (partition by licence_plate_number order by date desc as rn) 
    from the_table 
) t 
where rn = 1 
order by item; 

Использование функции окна, как правило, быстрее, чем я присоединиться к совокупности.