【问题标题】:Distinct Records based on two columns基于两列的不同记录
【发布时间】:2025-12-04 16:40:01
【问题描述】:

我有一个表testing 有两个字段namecom_date。表中的值如下所示。日期格式为mm/dd/yyyy

Name | Com_Date

MC  |  2/1/2013
MC  |  2/2/2013
MC  |  2/5/2013
MR  |  2/4/2013
MR  |  2/5/2013
MU  |  2/1/2013
MU  |  2/2/2013

我需要根据不同的名称和最新日期查询记录。 最新记录优先和基于名称的不同记录。 喜欢:

MC  |  2/5/2013
MR  |  2/5/2013
MU  |  2/2/2013

【问题讨论】:

    标签: sql oracle distinct


    【解决方案1】:

    您需要使用聚合函数 Max()GROUP BY

    select name, max(com_date) MaxCom_Date
    from yourtable
    group by name
    

    SQL Fiddle with Demo

    这也可以写成row_number() over(partition by...):

    select name, com_date
    from
    (
      select name, 
        com_date,
        row_number() over(partition by name order by com_date desc) rn
      from yourtable
    ) 
    where rn =1
    

    SQL Fiddle with Demo

    两者的结果都是:

    | NAME | MaxCom_Date |
    ---------------------
    |   MC | 02/05/2013  |
    |   MR | 02/05/2013  |
    |   MU | 02/02/2013  |
    

    【讨论】:

      【解决方案2】:
      SELECT name, MAX(date)
       FROM table
       GROUP BY name
       ORDER BY 2;
      

      【讨论】:

        【解决方案3】:

        如果您的 com_date 列是日期格式,您可以执行以下操作:

        SELECT name, TO_CHAR(MAX(com_date), MM/DD/YYYY) FROM testing GROUP BY name ORDER BY name ASC;
        

        如果您的日期不是日期格式,则需要先转换它,然后再将其粘贴到 MAX() 中

        【讨论】:

          最近更新 更多