基于两列的独特记录

时间:2013-02-05 10:31:47

标签: sql oracle distinct

我有一个包含两个字段testingname的表com_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

3 个答案:

答案 0 :(得分:2)

您需要使用带有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  |

答案 1 :(得分:1)

SELECT name, MAX(date)
 FROM table
 GROUP BY name
 ORDER BY 2;

答案 2 :(得分:0)

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

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

如果您的日期不是日期格式,则需要在将其粘贴到MAX()之前进行转换