【问题标题】:通过表达式仅获取组中的一条记录[重复]
【发布时间】:2021-12-22 01:29:23
【问题描述】:

假设我有一个薪金表,其中包含“paymonth”列(付款日期)“code1”列(一些人力资源代码)和“code2”列(另一个人力资源代码)。

这是表格的内容:

paymonth        code1      code2    payment
-------------------------------------------
01/01/2021      11             3    1000
01/01/2021      11             1    750
01/02/2021      11             3    650

对于每一对不同的代码 1 和代码 2,我想输入最后一行。这里的问题是第 1 行和第 2 行的发薪月日期相同。

所以像这样的查询:

select * from salary
order by paymonth
fetch first 2 row only;

会给:

01/01/2021      11             3    1000
01/02/2021      11             3    650

这不是我想要的。我想要这个(不同的代码):

01/01/2021      11             1    750
01/02/2021      11             3    650

你能帮忙吗?

【问题讨论】:

    标签: sql oracle greatest-n-per-group


    【解决方案1】:

    我会想到分析函数。我使用了row_number,也许rank 可以/应该使用(取决于数据)。

    SQL> with salary (paymonth, code1, code2, payment) as
      2    (select date '2021-01-01', 11, 3, 1000 from dual union all
      3     select date '2021-01-01', 11, 1,  750 from dual union all
      4     select date '2021-01-02', 11, 3,  650 from dual
      5    ),
      6  temp as
      7    (select s.*,
      8            row_number() over (partition by code1, code2 order by paymonth desc) rn
      9     from salary s
     10    )
     11  select * from temp
     12  where rn = 1;
    
    PAYMONTH        CODE1      CODE2    PAYMENT         RN
    ---------- ---------- ---------- ---------- ----------
    01/01/2021         11          1        750          1
    01/02/2021         11          3        650          1
    
    SQL>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-16
      • 1970-01-01
      • 2018-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多