2014-10-04 58 views
0

我选择了一个具有多个相同记录(相同REQUEST_ID)与不同VERSION_NO的表。所以我想对它进行降序排序,这样我可以取最高的数字(最新的记录)。在选择中排序BY

这是我...

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 *不适用于所有入口。但这只是我从阅读中得到的理解。 请让我知道我如何做这项工作。谢谢

+0

这是一个经典的[标签:最大每组],与[许多现有解决方案](http://stackoverflow.com/questions/1313120/retrieving-the-last-record-in-each-组)。 – 2014-10-04 07:42:57

回答

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的答案。

+0

我的情况最好和最简单的答案。我排序request_id升序和version_no在我的阅读表循环内降序,它解决了概率。谢谢!! – 2014-10-06 16:48:19

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)

0

刚刚宣布it_abs3作为与将由要排序的列键排序表。

您也可以查询后排序表。

SORT it_abs3 BY ...