gpt4 book ai didi

sql - 具有基于 ORDER BY 的 Limit/Rownum 的 Oracle JSON_ARRAYAGG

转载 作者:行者123 更新时间:2023-12-05 02:51:32 26 4
gpt4 key购买 nike

我正在使用 Oracle 19c 和 JSON_ARRAYAGG 函数(使用 JSON_OBJECT)返回 JSON 对象的串联数组字符串。我需要根据 ORDER BY SENT_DATE DESC 将结果限制为前 10 个对象

注意 JSON_ARRAYAGG 有它自己的 ORDER BY 所以我把它放在那里。但是,有限制工具吗?

以下语法正确,但结果不正确。我的 JSON 对象在连接的字符串中未按 SENT_DATE DESC 顺序排列。

SELECT json_arrayagg(json_object('sentDate' value mh.sent_date, 
'sentByEmail' value mh.send_by_email,
'sentBy' value mh.sent_by,
'sentByName' value mh.sent_by_name,
'sentToEmail' value mh.sendee_email)
ORDER BY mh.sent_date DESC) /*ORDER BY inside json_arrayagg)*/
/*Normally this works, but not with ROWNUM*/
from mail_history_t mh
where mh.plan_id = 763 and mh.is_current_status = 'Y' and rownum <= 10; /*ROWNUM outside*/

我发现如果我在通常的行查询中检查最前面的结果是不正确的,

select * from mail_history_t where plan_id = 763 and is_current_status ='Y' order by sent_date desc;       


最佳答案

您可以先在子查询中选择前 10 行,使用 fetch first 行限制子句,然后在外部查询中聚合:

select json_arrayagg(
json_object(
'sentDate' value sent_date,
'sentByEmail' value send_by_email,
'sentBy' value sent_by,
'sentByName' value sent_by_name,
'sentToEmail' value sendee_email
)
order by sent_date desc
) js_array
from (
select *
from mail_history_t
where plan_id = 763 and is_current_status = 'Y'
order by sent_date desc
fetch first 10 rows only
) t

关于sql - 具有基于 ORDER BY 的 Limit/Rownum 的 Oracle JSON_ARRAYAGG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63106488/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com