如何在"SELECT ... FOR ALL ENTRIES ..."中对行进行排序,不接受 ORDER BY



我正在选择一个表,该表具有多个具有不同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 ...

相关内容

  • 没有找到相关文章