2017-08-01 63 views
1

我有如下表,并且没有主键。无法获得与COL1的独特记录和COL2排序

COL_Date  Col_Text Col_Lang 
23-July-17  Hello  de 
23-July-17  Hello  en 
19-July-17  Hello  de 
18-July-17  Hello  en 
17-July-17  Hello  es 

我想获取每种语言的最新行。我可以使用下面的查询来获取2列,但它不包括Col_Text列,有没有办法做到这一点?添加Col_Text以选择错误的结果。

SELECT DISTINCT Col_Lang, MAX(COL_Date) 
FROM table1 
GROUP BY Col_Lang 
ORDER BY MAX(COL_Date) DESC, Col_Lang 
+0

什么是DBMS?你会得到什么错误? – mustaccio

+0

ORA-00932:不一致的数据类型:预计 - 得到CLOB 00932. 00000 - “不一致的数据类型:预期的%s得到%s”Col_text的类型为Clob –

回答

3

您可以使用row_number()

select COL_Date, Col_Text, Col_Lang 
from (select t1.*, 
      row_number() over (partition by col_lang order by col_date desc) as seqnum 
     from t1 
    ) t1 
where seqnum = 1; 

返回整行。在Oracle中,您还可以使用keep

SELECT Col_Lang, MAX(COL_Date), 
     MAX(col_text) KEEP (DENSE_RANK FIRST ORDER BY Col_date) as col_text 
FROM table1 
GROUP BY Col_Lang 
ORDER BY MAX(COL_Date) DESC, Col_Lang; 
+0

为什么我们添加了seqnum?我可以看到这是结果中的附加列。 –

+1

@chitreshsirohi。 。 。只需在外部'select'中选择你想要的列。 –

+0

它在H2 db上抛出语法错误,“)”丢失 –