代码之家  ›  专栏  ›  技术社区  ›  Nurzhan Nogerbek

如何在MySQL中记录最后一个日期?

  •  1
  • Nurzhan Nogerbek  · 技术社区  · 7 年前

    在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 回复  |  直到 7 年前
        1
  •  3
  •   Harshil Doshi    7 年前

    尝试以下查询:

    Select *from
    table1 t1
    where 
       (object_id,time_key) in 
               (select object_id, max(time_key)
                from table1
                group by object_id)
     ;
    
        2
  •  2
  •   Gordon Linoff    7 年前

    要筛选行,请使用 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
                       );
    
        3
  •  2
  •   Strawberry    7 年前

    您可以使用相关的子查询

    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
          )