SAP 业务一号 | HANA 版本:2.0 SPS05
我正在尝试查询所有供应商及其上次采购订单的
DocNum
和 DocDate
。
具有 CTE 和窗函数:
WITH Last_PO AS (
SELECT
"CardCode", "DocNum", "DocDate"
,ROW_NUMBER() OVER (PARTITION BY "CardCode" ORDER BY "DocEntry" DESC) row_num
FROM OPOR
WHERE "CANCELED" = 'N'
)
SELECT
OCRD."CardCode"
,OCRD."CardName"
,Last_PO."DocNum" AS "Last PO"
,Last_PO."DocDate" AS "Last PO Date"
FROM
OCRD LEFT JOIN Last_PO on Last_PO.row_num = 1 AND Last_PO."CardCode" = OCRD."CardCode"
WHERE
OCRD."CardType" = 'S'
ORDER BY
OCRD."CardCode"
尝试使用 LATERAL join 时,出现错误
incorrect syntax near "WHERE"
:
SELECT
OCRD."CardCode"
,OCRD."CardName"
,Last_PO."DocNum" AS "Last PO"
,Last_PO."DocDate" AS "Last PO Date"
FROM
OCRD LEFT JOIN LATERAL (
SELECT "DocNum", "DocDate"
FROM OPOR
WHERE "CANCELED" = 'N' AND "CardCode" = OCRD."CardCode"
ORDER BY "DocEntry" DESC
LIMIT 1
) Last_PO ON TRUE
WHERE
OCRD."CardType" = 'S'
ORDER BY
OCRD."CardCode"
我发现了这个评论,所以也许这个功能从来没有正常工作过:
文档的链接将带您到最新版本(2.0 SP07 in 2023)但是later_table_expression的描述还没有出现 自SPS 05版本以来。您可以更改版本来查看它。文档 声明它应该与 LEFT OUTER JOIN 一起使用,但我无法得到 接受除交叉连接语法之外的任何内容。我想知道这是不是一个 即将悄然消失的功能。
我可以通过改变 ON 条件来实现这一点,但与 CTE 版本相比,它的速度非常慢。我只能访问 B1 应用程序本身,因此无法对其进行分析,但执行需要 3-5 秒,而 CTE 版本是即时的。
SELECT
OCRD."CardCode"
,OCRD."CardName"
,Last_PO."DocNum" AS "Last PO"
,Last_PO."DocDate" AS "Last PO Date"
FROM
OCRD LEFT JOIN LATERAL (
SELECT "CardCode", "DocNum", "DocDate"
FROM OPOR
WHERE "CANCELED" = 'N' AND "CardCode" = OCRD."CardCode"
ORDER BY "DocEntry" DESC
LIMIT 1
) Last_PO ON Last_PO."CardCode" = OCRD."CardCode"
WHERE
OCRD."CardType" = 'S'
ORDER BY
OCRD."CardCode"