0

我正在选择一个表,该表具有多个相同的记录(相同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 * 不适用于所有条目。但这只是我阅读后的理解。请让我知道如何使这项工作。谢谢

4

3 回答 3

2

如果需要,您可以在选择之后简单地对 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 的答案。

于 2014-10-06T14:30:52.760 回答
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)

于 2014-10-04T05:55:44.900 回答
0

只需将其声明it_abs3为带有键的排序表,该键将包含您要排序的列。

您还可以在查询后对表格进行排序。

SORT it_abs3 BY ...
于 2014-10-04T15:54:14.580 回答