ABAP 分组取最新的2条记录
需求:
取出表中ZHR_KHND相等中最新的2条记录
方法:
先对"主键"进行分组,然后分组后取最大的2条
表内数据
人员编号 | 考核年度 | 季度 | 评估得分 | 评级 |
---|---|---|---|---|
1 | 2021 | 1 | 100 | A |
1 | 2021 | 2 | 100 | A |
1 | 2021 | 3 | 100 | A |
1 | 2021 | 4 | 100 | A |
2 | 2021 | 1 | 100 | A |
2 | 2021 | 2 | 100 | A |
2 | 2021 | 3 | 100 | A |
2 | 2021 | 4 | 100 | A |
期望结果
人员编号 | 考核年度 | 季度 | 评估得分 | 评级 |
---|---|---|---|---|
1 | 2021 | 3 | 100 | A |
1 | 2021 | 4 | 100 | A |
2 | 2021 | 3 | 100 | A |
2 | 2021 | 4 | 100 | A |
CODE
SELECT
PA9502_1~PERNR,
PA9502_1~ZHR_KHND,
PA9502_1~ZHR_PJJJ
FROM PA9502 AS PA9502_1
WHERE 2 GE (
SELECT COUNT(*)
FROM PA9502 AS PA9502_2
WHERE PA9502_2~PERNR EQ PA9502_1~PERNR
AND PA9502_2~ZHR_KHND EQ PA9502_1~ZHR_KHND
AND PA9502_2~ZHR_PJJJ GE PA9502_1~ZHR_PJJJ
)
ORDER BY PA9502_1~PERNR,PA9502_1~ZHR_KHND DESCENDING
INTO TABLE @DATA(LT_PA9502_2)
.
弊端:
对于如果年度有相同的,则可能会有问题,比如
人员编号 | 考核年度 | 季度 | 评估得分 | 评级 |
---|---|---|---|---|
1 | 2021 | 1 | 100 | A |
1 | 2021 | 2 | 100 | A |
1 | 2021 | 3 | 100 | A |
1 | 2021 | 4 | 100 | A |
2 | 2021 | 1 | 100 | A |
2 | 2021 | 2 | 100 | A |
2 | 2021 | 3 | 100 | A |
2 | 2021 | 4 | 100 | A |
2 | 2021 | 4 | 110 | S |
结果
人员编号 | 考核年度 | 季度 | 评估得分 | 评级 |
---|---|---|---|---|
1 | 2021 | 3 | 100 | A |
1 | 2021 | 4 | 100 | A |
2 | 2021 | 4 | 110 | S |
2 | 2021 | 4 | 100 | A |
扩展:
如果是取第3条吧2改成3即可
备注:
以上数据和规则都是随意填的,仅作为测试样例