相当于HANA SQL中没有TOP或ORDER BY的子查询

时间:2016-06-13 15:11:43

标签: sql subquery hana

SAP SQL Converter将此作为输出:

SELECT c."id", c."key_link", 
    (SELECT TOP 1 "notes_extra" 
    FROM "Orders" c2 
    WHERE c2."id" = c."id" AND c2."start" < c."start" 
    ORDER BY c2."start" DESC) AS "previous_notes" 
FROM "Orders" c
ORDER BY c."id";

不幸的是,SAP HANA SPS 10不接受它:
SAP DBTech JDBC:[309]:相关子查询不能有TOP或ORDER BY

我正在努力将查询转换为没有TOP和ORDER BY的东西。用WHERE "start" = (SELECT MAX("start")尝试了一些事情,但是因为&#34;开始&#34;可以有重复的值,我最终得到: SAP DBTech JDBC:[305]:单行查询返回多行

那么HANA SQL中的正确等价物是什么?

编辑:这似乎增加了列&#34; notes_extra&#34;是NCLOB类型。任何替代方案我尝试在此列的聚合函数(MAX,FIRST_VALUE,...)中的某个点上结束,这导致: SAP DBTech JDBC:[264]:无效的数据类型:LOB类型聚合函数

4 个答案:

答案 0 :(得分:2)

您根本不需要进行子选择,而是使用window function代替:

public void onAttach(Activity activity) {
  super.onAttach(activity);
  this.mActivity = activity;
  JSONObject mObject =((ProfileActivity)getActivity()).getProfile();
}

答案 1 :(得分:1)

&#34;我不在乎&#34;数据库不擅长处理。如果没有实际决定采用哪一行的选项,那么数据模型就不适合回答这个问题。

 select "id", "notes_extra" from 
     (SELECT c."id", c."notes_extra" 
            , row_number () over 
               (partition by c."id" 
                ORDER BY c."id" asc , c."start" desc) as RN 
      FROM orders c ) 
  where rn =2;

可以根据常规排序提供第二个订单评论。请注意,这提供了与初始查询相同的默认打破行为,即:任意。

答案 2 :(得分:0)

如果你只看第一个&#34;按给定的排序顺序列,您始终可以使用max()/ min()聚合。不确定你遇到了什么问题,但这确实是可能的。 但是,对于您的要求,我建议在SQL视图中实现逻辑(并将其与主查询连接)或作为表udf。

答案 3 :(得分:0)

您现在可以为此使用 FIRST_VALUE() 函数,如下所示:

SELECT (FIRST_VALUE(col ORDER BY col) FROM ... WHERE ...) AS ...