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类型聚合函数
答案 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 ...