oracle 当多个字段重复时只显示一条时间最靠前的记录

比如表A 字段1 字段2 字段3 字段4
1 2 3 8月12
1 2 3 8月13
2 3 6 9月12
2 3 1 9月13
查询出来结果
字段1 字段2 字段3 字段4
1 2 3 8月13

第1个回答  2016-12-26
select 字段1,字段2,字段3,max(字段4) as 字段4 from A group by 字段1,字段2,字段3
这样写试一下。追问

如果只是这几个字段可以 但是再加字段显示就变成不是group by表达式了

追答

不好意思。有点儿没明白,你是想不用group by来实现,是吗?

追问

不是 ,是这个表字段很多 ,这四个字段是主要数据 ,但是他们后面还有字段也要显示,按照你说的语句只显示这个四个字段没问题 ,但是如果要显示他们后面的字段5字段6之类的就会报错 提示不是group by表达式

追答

哦。那这样,你在加字段的时候,select后面添加的字段,在group by的后面也要添加相同名称的字段。
就是说select和group by后面的字段要一起添加。
这样再试一下。

max(字段4) as 字段4
这个不用加到group by中。

追问

不行 ,这样可以显示 ,但是没有去重

追答

不好意思。我还想问一下,你说的去重复,是指字段1,字段2,字段3不能重复,其余列没有这个限制。是吗?

追问

是的

追答

select A.* from (select 字段1,字段2,字段3,max(字段4) as 字段4 from A group by 字段1,字段2,字段3) B, A where A.字段1=B.字段1 and A.字段2=B.字段2 and A.字段3=B.字段3 and A.字段4=B.字段4

这样写再试一下。
不好意思啊。我水平一般,就是尽我最大能力帮你解决问题。

本回答被提问者采纳