You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HANA 2.0 SPS05中如何正确使用LEFT LATERAL JOIN?

SAP Business One HANA 2.0 SPS05 供应商最后采购订单查询问题

基础信息

  • 环境:SAP Business One | HANA 版本:2.0 SPS05
  • 需求:查询所有供应商及其最后一张采购订单的订单编号(DocNum)和订单日期(DocDate)

问题说明

使用CTE结合窗口函数可正常实现该查询,但尝试通过LEFT LATERAL JOIN实现时,会触发错误:incorrect syntax near "WHERE"。根据相关评论,LATERAL JOIN特性的文档在HANA 2.0 SPS05版本后不再提供,推测该版本的该功能存在兼容性问题。

可行实现方案(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"

报错的LEFT LATERAL JOIN实现方案

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"

内容的提问来源于stack exchange,提问作者Bangaio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 02:35:04