典型的数据去重问题,方法一堆
参考吧,把下面语句中的id替换成type,日期替换为create_date,把表名T替换为你的信息表
select ID,日期,其他字段
from (
    select ID,日期,其他字段,row_number() over(partition by ID order by 日期 DESC) rn
    from T
)where rn=1select * from T T1
WHERE NOT EXISTS(SELECT 1 FROM T WHERE ID=T1.ID AND 日期>T1.日期)
 
select * from T
WHERE (ID,日期) IN (SELECT ID,MAX(日期) FROM T GROUP BY ID)
 
SELECT ID,MAX(日期),
MAX(字段1)KEEP(DENSE_RANK LAST ORDER BY 日期)
MAX(字段2)KEEP(DENSE_RANK LAST ORDER BY 日期)
……--其他字段同上
FROM T GROUP BY ID

解决方案 »

  1.   

    用窗口函数或子查询可以实现问题中的查询,可以参考1楼给出的写法。不过SQL写法有些难懂,而且如果有更复杂的需求(查询第2新、或第n新的记录),就会更难写了。
    这种情况可以试试润乾的免费集算器产品,其中的有序集合使得完成这类运算非常简单。集算器提供了JDBC接口用起来和DB基本一样。问题中使用集算器实现的代码可以这样写:
    A2通过将分组结果排序后取第一条即可完成,直接通过序号取数,如果想取第二条,那只需要写成:=A1.group(type).(~.sort(create_date:-1)(2))即可。
      

  2.   


    select *
    from (
        select t.*,row_number() over(partition by TYPE order by create_date DESC) rn
        from t
    )where rn=1