2016-05-23 2 views
1

Я работаю с набором данных аналогичного формата на следующее:Найти запись по дате для каждого отдельного значения столбца

Table: Account 
*-----------*----------*-------------* 
|  id | amount | date  | 
*-----------*----------*-------------* 
|  1 | 100 | 01/01/2016 | 
|  2 | 100 | 01/02/2016 | 
|  3 | 100 | 01/03/2016 | 
|  4 | 200 | 01/04/2016 | 
|  5 | 200 | 01/05/2016 | 
|  6 | 200 | 01/06/2016 | 
|  7 | 300 | 01/07/2016 | 
|  8 | 300 | 01/08/2016 | 
|  9 | 300 | 01/09/2016 | 
|  10 | 400 | 01/10/2016 | 
*-----------*----------*-------------* 

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

*-----------*----------*-------------* 
|  id | amount | date  | 
*-----------*----------*-------------* 
|  3 | 100 | 01/03/2016 | 
|  6 | 200 | 01/06/2016 | 
|  9 | 300 | 01/09/2016 | 
|  10 | 400 | 01/10/2016 | 
*-----------*----------*-------------* 

Я еще новичок в подзапросов, но я попытался следующий

SELECT a.id, a.amount, a.date FROM account a WHERE a.date IN (SELECT MAX(date) FROM account) 

Однако это только возвращает последнюю дату. Как я могу получить последнюю дату для каждого отдельного значения в столбце количества.

ответ

2

Если вам нужно только количество:

SELECT amount, MAX(date) from myTable group by amount 

Если вам нужно больше данных:

SELECT * from myTable where (amount, date) IN (
    SELECT amount, MAX(date) as date from table group by amount 
) 

Или, может быть, это будет работать быстрее:

SELECT * from myTable A WHERE NOT EXISTS (
    SELECT 1 
    FROM myTable B 
    WHERE A.date < B.date 
     AND A.amount = B.amount 
) 
Смежные вопросы