选择哪个显示每个合约最近创建的2个记录

时间:2017-05-31 09:22:28

标签: sql oracle select

我有一张临时表,其中约有2000份合约代码。每个合同每月有1个分期付款,但上个月生成了两次分期付款的记录。 我需要为每个合同选择最后两个记录,这些记录在一个月内分两次生成。 例如:

Select * from TABLE_XY
where code = '112233' and rownum <= 2
order by creation_date desc;

此选项显示我需要的内容,但只显示一个代码。

我有临时表(名称为temporary_table),我存储了所有合同。 我不确定我是否解释得很好:)如果你需要更多ino请告诉我 感谢

3 个答案:

答案 0 :(得分:0)

我不知道我是否明白你想做什么。如果需要提取与合同相关的代码,则存储在临时表中可以进行JOIN或在代码的IN中放入一个选择

Select * from TABLE_XY where code in 
(select code from temporary_table where id_contract = ?¿) and rownum <= 2 order by creation_date desc;

答案 1 :(得分:0)

这应该有帮助

select * from (
  select
    t.*,
    count(code) over (partition by code, to_char(creation_date, 'YYYY-MM')) as cnt,
    to_char(creation_date, 'YYYY-MM') as creation_month,
    row_number() over (partition by code, to_char(creation_date, 'YYYY-MM') order by creation_date desc) as rnum
  from table_xy t
  )
where cnt > 1 and rnum < 3

答案 2 :(得分:0)

您可以尝试为上个月重复的代码提供行号,并附上该日期的订单。

select * from
(Select a.*,row_number() over(partition by code order by creation_date desc) rn from TABLE_XY a)
where rn <= 2;