SELECT中的SORT BY

时间:2014-10-04 05:17:13

标签: mysql sql sorting select abap

我选择的表格具有多个具有不同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合作。但这只是我从阅读中得到的理解。 请告诉我如何才能完成这项工作。感谢

3 个答案:

答案 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 ...