我选择的表格具有多个具有不同REQUEST_ID
的相同记录(相同VERSION_NO
)。所以我想按顺序对它进行排序,以便我可以取最高的数字(最新记录)。
这就是我的......
IF it_temp2[] IS NOT INITIAL.
SELECT request_id
version_no
status
item_list_id
mod_timestamp
FROM ptreq_header INTO TABLE it_abs3
FOR ALL ENTRIES IN it_temp2
WHERE item_list_id EQ it_temp2-itemid.
ENDIF.
因此version_no是SELECT字段之一,但我想对该字段进行排序(降序)并且只取第一行。
我正在做一些研究,并且读到SORT * BY *不能与FOR ALL ENTRIES合作。但这只是我从阅读中得到的理解。 请告诉我如何才能完成这项工作。感谢
答案 0 :(得分:2)
您可以在选择之后简单地对itab进行排序,然后删除所有的adjecent副本,如果需要的话:
SORT it_abs3 BY request_id [ASCENDING] version_no DESCENDING.
DELETE ADJACENT DUPLICATES FROM it_abs3 COMPARE request_id.
根据itab中预期的垃圾量(要删除的行),SQL方法更好。见Used_By_Already的答案。
答案 1 :(得分:1)
如果您使用的是"最新的"为了表示"最近的条目",字段mod_timestamp
似乎是相关的,你可以用这种方式只选择每个request_id的最新记录。
SELECT
request_id
, version_no
, status
, item_list_id
, mod_timestamp
FROM ptreq_header h
INNER JOIN (
SELECT
request_id
, MAX(mod_timestamp) AS latest
FROM ptreq_header
GROUP BY
request_id
) l
ON h.request_id = l.request_id
AND h.mod_timestamp = l.latest
如果您想要最大的version_no,那么请使用MAX(mod_timestamp)
代替MAX(version_no)
答案 2 :(得分:0)
只需将it_abs3
声明为带有键的已排序表,该键将包含要排序的列。
您还可以在查询后对表格进行排序。
SORT it_abs3 BY ...