我正在选择一个表,该表具有多个具有不同VERSION_NO
的相同记录(相同的REQUEST_ID
)。所以我想按降序排序,这样我就可以得到最高的数字(最新记录)。
这就是我所拥有的。。。
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*不适用于所有参赛作品。但这只是我从阅读中得到的理解。请让我知道我该怎么做。感谢
如果需要,您可以简单地在select之后对itab进行排序,然后删除所有相邻的重复项:
SORT it_abs3 BY request_id [ASCENDING] version_no DESCENDING.
DELETE ADJACENT DUPLICATES FROM it_abs3 COMPARE request_id.
根据itab中预期垃圾(要删除的行)的数量,SQL方法更好。请参阅Used_By_Already的答案。
如果您使用术语"最新"来表示"最新条目",那么字段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
如果您想要最大版本_no,则使用MAX(version_no)
而不是MAX(mod_timestamp)
只需将it_abs3
声明为一个排序表,该表的键将由您想要排序的列组成。
您也可以在查询后对表进行排序。
SORT it_abs3 BY ...