Как взять запись с последней даты в MySQL? - PullRequest
0 голосов
/ 11 февраля 2019

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

| OBJECT_ID | OBJECT_NAME | TIME_KEY            | OBJECT_CODE |
|-------------------------------------------------------------|
| 66        | Kemir       | 2019-01-01 12:00:00 | XVG         |
| 66        | Kemir       | 2019-01-01 13:00:00 | GTG         |
| 88        | Damir       | 2019-01-01 12:00:00 | NGD         |
| 99        | Vivle       | 2019-01-01 12:00:00 | FGT         |
| 99        | Vivle       | 2019-01-01 12:00:00 | HFD         |
| 99        | Vivle       | 2019-01-01 14:00:00 | KJD         |

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

| OBJECT_ID | OBJECT_NAME | TIME_KEY            | OBJECT_CODE |
|-------------------------------------------------------------|
| 66        | Kemir       | 2019-01-01 13:00:00 | GTG         |
| 88        | Damir       | 2019-01-01 12:00:00 | NGD         |
| 99        | Vivle       | 2019-01-01 14:00:00 | KJD         |

Я использую следующий SQLоператор:

SELECT *
FROM TABLE_MAIN
GROUP BY OBJECT_ID DESC;

Возвращает первую дату записи:

| OBJECT_ID | OBJECT_NAME | TIME_KEY            | OBJECT_CODE |
|-------------------------------------------------------------|
| 66        | Kemir       | 2019-01-01 12:00:00 | XVG         |
| 88        | Damir       | 2019-01-01 12:00:00 | NGD         |
| 99        | Vivle       | 2019-01-01 12:00:00 | FGT         |

Как решить эту проблему?

Ответы [ 3 ]

0 голосов
/ 11 февраля 2019

Вы хотите фильтровать строки, поэтому используйте WHERE.Вот один из методов:

SELECT m.*
FROM TABLE_MAIN m
WHERE m.time_key = (SELECT MAX(m2.time_key)
                    FROM TABLE_MAIN m2
                    WHERE m2.object_id = m.object_id
                   );
0 голосов
/ 11 февраля 2019

Попробуйте следующий запрос:

Select *from
table1 t1
where 
   (object_id,time_key) in 
           (select object_id, max(time_key)
            from table1
            group by object_id)
 ;
0 голосов
/ 11 февраля 2019

Вы можете использовать коррелированный подзапрос

select t1.* form TABLE_MAIN t1
  where t1.TIME_KEY= (
                select max(TIME_KEY) 
         from TABLE_MAIN t2 where t1.OBJECT_ID=t2.OBJECT_ID
        and   t1.OBJECT_NAME=t2.OBJECT_NAME
      )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...