[英]Get the latest data from table
我想從 ABAP 中的表中獲取最新數據。
這是表ckmlcr
中的一個示例:
曼德 | KALNR | BDATJ | 波珀 | UNTPER | CURTP | 佩恩 | VPRSV | STPRS | PVPRS | WAERS | ... |
---|---|---|---|---|---|---|---|---|---|---|---|
100 | 000100000000 | 2020 | 007 | 000 | 10 | 1 | 小號 | 1.00 | 0.00 | 日元 | ... |
100 | 000100000000 | 2020 | 007 | 000 | 30 | 1 | 小號 | 1.00 | 0.00 | 日元 | ... |
100 | 000100000000 | 2020 | 007 | 000 | 31 | 1 | 小號 | 1.00 | 0.00 | 日元 | ... |
100 | 000100000000 | 2020 | 008 | 000 | 10 | 1 | 小號 | 1.00 | 0.00 | 日元 | ... |
100 | 000100000000 | 2020 | 008 | 000 | 30 | 1 | 小號 | 1.00 | 0.00 | 日元 | ... |
100 | 000100000000 | 2020 | 008 | 000 | 31 | 1 | 小號 | 1.00 | 0.00 | 日元 | ... |
100 | 000199999999 | 2020 | 007 | 000 | 10 | 1 | 小號 | 20.00 | 0.00 | 歐元 | ... |
100 | 000199999999 | 2020 | 007 | 000 | 30 | 1 | 小號 | 25.00 | 0.00 | 歐元 | ... |
100 | 000199999999 | 2020 | 007 | 000 | 31 | 1 | 小號 | 20.00 | 0.00 | 歐元 | ... |
我想獲取每個KALNR
的最新數據,因此這意味着我的 output 表應具有以下值:
曼德 | KALNR | BDATJ | 波珀 | UNTPER | CURTP | 佩恩 | VPRSV | STPRS | PVPRS | WAERS | ... |
---|---|---|---|---|---|---|---|---|---|---|---|
100 | 000100000000 | 2020 | 008 | 000 | 10 | 1 | 小號 | 1.00 | 0.00 | 日元 | ... |
100 | 000100000000 | 2020 | 008 | 000 | 30 | 1 | 小號 | 1.00 | 0.00 | 日元 | ... |
100 | 000100000000 | 2020 | 008 | 000 | 31 | 1 | 小號 | 1.00 | 0.00 | 日元 | ... |
100 | 000199999999 | 2020 | 007 | 000 | 10 | 1 | 小號 | 20.00 | 0.00 | 歐元 | ... |
100 | 000199999999 | 2020 | 007 | 000 | 30 | 1 | 小號 | 25.00 | 0.00 | 歐元 | ... |
100 | 000199999999 | 2020 | 007 | 000 | 31 | 1 | 小號 | 20.00 | 0.00 | 歐元 | ... |
我的程序應該選擇年份
PARAMETERS: bdatj TYPE ckmlcr-bdatj DEFAULT sy-datum+0(4) OBLIGATORY.
並且應該為每個成本估算數字 ( KALNR
POPER
。
實現這一目標的最簡單方法是什么? 由於數據很多,直接獲取表上SQL select內的過濾數據就好了。
這將是 SQL 語句,無需任何修改即可獲取最新數據。
SELECT * FROM ckmlcr INTO TABLE @DATA(ckmlcr_single)
WHERE kalnr = @<ckmlcr_line>-kalnr
AND bdatj = @bdatj.
對我有用的是:
SELECT * FROM ckmlcr INTO TABLE @DATA(ckmlcr_single)
WHERE kalnr = @<ckmlcr_line>-kalnr
AND bdatj = @bdaj
AND poper = ( SELECT MAX( poper ) from ckmlcr
WHERE kalnr = @kalnr
AND bdatj = 2022 ).
此解決方案僅適用於單個kalnr
,而不適用於上面對整個表的要求。
這意味着我的程序目前看起來像這樣:
" get single kalnr
SELECT DISTINCT kalnr FROM ckmlcr INTO TABLE @DATA(data_ckmlcr)
WHERE bdatj = @bdatj
ORDER BY kalnr.
LOOP AT data_ckmlcr ASSIGNING FIELD-SYMBOL(<ckmlcr_line>).
" get the latest data from this kalnr
SELECT * FROM ckmlcr INTO TABLE @DATA(ckmlcr_single)
WHERE kalnr = @<ckmlcr_line>-kalnr
AND bdatj = @bdatj
AND poper = ( SELECT MAX( poper ) from ckmlcr
WHERE kalnr = @<ckmlcr_line>-kalnr
AND bdatj = @bdatj ).
[...]
ENDLOOP.
由於循環中的 select 性能不太好......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.