通过表达式只获取一组中的一条记录
Get only one record in a group by expression
假设我的工资 table 有 'paymonth' 列(付款日期) 'code1' 列(一些人力资源代码)和 'code2' 列(另一个人力资源代码)。
这里是table的内容:
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
你能帮忙吗?
我会想到解析函数。我用了row_number
,也许rank
could/should会被用(取决于数据)。
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>
假设我的工资 table 有 'paymonth' 列(付款日期) 'code1' 列(一些人力资源代码)和 'code2' 列(另一个人力资源代码)。
这里是table的内容:
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
你能帮忙吗?
我会想到解析函数。我用了row_number
,也许rank
could/should会被用(取决于数据)。
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>