2016-08-02 4 views
0

я получил таблицу со следующим синтаксисом:Distinct на одной колонке, но получить все

ID, VALUE, TIMESTAMP 

(ID,TIMESTAMP) является первичным ключом, так что может быть более чем одна строка для каждого идентификатора. Есть 5000 уникальных идентификаторов.

Я хочу получить самую последнюю запись для каждого идентификатора.

Мой наивный способ сделать было: SELECT * FROM table ORDER BY TIMESTAMP DESC LIMIT 5000;

В большинстве случаев это даст правильный результат, но не гарантируется.

Поскольку в таблице могут быть записи от 100 до 500 тыс., Я хотел бы принять во внимание эффективность.

Что вы предлагаете?

ответ

1

TRY ЭТО

SELECT ID, VALUE, TIMESTAMP 
    FROM table 
    GROUP BY ID 
    HAVING MAX(TIMESTAMP) 
    ORDER BY TIMESTAMP DESC ; 

ИЛИ

SELECT ID, VALUE, TIMESTAMP 
    FROM table 
    GROUP BY ID 
    ORDER BY TIMESTAMP DESC ; 
0

Вы хотите найти последнюю дату для каждой записи ID, попробуйте этот

SELECT * 
FROM table AS a 
WHERE TIMESTAMP = (
    SELECT MAX(TIMESTAMP) 
    FROM table AS b 
    WHERE a.ID = b.ID 
) 
0
Please try this : 

SELECT * FROM 
(SELECT ID, 
     VALUE, 
    ROW_NUMBER() OVER(PARTITION BY ID ORDER BY TIMESTAMP DESC) AS TIMESTAMP 
    FROM 
    TABLE) 
    WHERE TIMESTAMP=1 ; 

If your DB supports QUALIFY statement you can try below also : 

SELECT * FROM 
     TABLE 
    QUALIFY ROW_NUMBER() OVER(PARTITION BY ID ORDER BY TIMESTAMP DESC)=1 ;`enter code here` 
Смежные вопросы