首页 > 解决方案 > 选择过去 30 天内的行

问题描述

我有一个选择语句来获取参考的顺序,但现在我需要将结果限制在过去 30 天的范围内,但我不知道该怎么做。

SELECT
    *
FROM AFKO
WHERE AFKO~PLNBEZ = @reference
AND DATEDIFF( DAY, AFKO~GLTRP, @sy-datum ) >= -30
ORDER BY AFKO~GLTRP DESCENDING
INTO TABLE @it_afko.

我读过 DATEDIFF 可以进行操作,但 SAP 说该功能是未知的。我正在尝试直接使用 - 运算符:

SELECT
    *
FROM AFKO
WHERE AFKO~PLNBEZ = @reference
AND AFKO~GLTRP - @sy-datum >= -30
ORDER BY AFKO~GLTRP DESCENDING
INTO TABLE @it_afko.

但是 SAP 说只有基本算术类型可以在算术表达式中使用。AFKO~GLTRP 的类型无效

我怎样才能得到差异?

标签: abapopensql

解决方案


您需要在 opensql 中为旧版本使用计算日期之前准备好计算日期,如下例所示。

DATA: lv_date   TYPE sy-datum,
      reference TYPE afko-plnbez,
      it_afko   TYPE TABLE OF afko.

CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
  EXPORTING
    date            = sy-datum
    days            = 30
    months          = 0
    signum          = '-'
    years           = 0
 IMPORTING
   calc_date       = lv_date.

SELECT *
  FROM afko
  INTO TABLE @it_afko
 WHERE afko~plnbez = @reference
   AND afko~gltrp >= @lv_date
 ORDER BY afko~gltrp DESCENDING.

推荐阅读