sql - Oracle SQL - 创建“未存储”过程
问题描述
我有这个 SQL 查询
SELECT ACCBAL_DATE, ACCBAL_AMOUNT
FROM ACCOUNT_BALANCES t
WHERE ACC_KEY = '964570223'
AND ACCBAL_KEY = '16'
ORDER BY ACCBAL_DATE DESC
FETCH FIRST 1 ROWS ONLY;
它返回一行,但我需要将此查询用于许多 ACC_KEYS(大约 600 个)。
所以第一种方法是使用不同的 ACC_KEY 参数运行这个查询大约 600 倍。
第二个是创建我认为的程序。
将使用变量 acc_key 并将其移动到 WHERE 语句的过程。问题是由于权限,我无法创建存储在服务器上的过程。
有没有办法在不将程序存储在服务器上的情况下解决它?
编辑:我知道 IN 子句,但这不是我需要的。我需要一些可以运行大约 600 倍的查询,每次执行都在 WHERE 子句中使用另一个 ACC_KEY,并且输出应该是 600 行。
解决方案
当我在子句 IN 中使用它们时,它仍然只会返回一行。我只想返回一行,因为没有限制它返回大约 100 行,所以我只想要需要数据的第一行。对于每个 ACC_KEY 它应该只返回一行
您仍然可以使用IN()
列出所有 600 个键值的子句来做到这一点:
select acc_key,
max(accbal_date) as accbal_date,
max(accbal_amount) keep (dense_rank last order by accbal_date) as accbal_amount
from account_balances t
where acc_key in ('964570223', '964570224', ...) -- up to 1000 allowed
and accbal_key = '16'
group by acc_key
order by acc_key;
这是使用聚合函数并按键分组,因此每个键将获得一行,其中包含最近日期的数据。
阅读有关 keep/last的更多信息。
使用集合或表格仍然会更好 - 可能是从 Excel 工作表加载的外部表格,保存为 CSV;不仅因为您只能为单个IN()
子句或任何表达式列表提供 1000 个条目,而且还出于性能和可读性/维护的原因。
推荐阅读
- ios - 如何获取服务器地址和远程标识符?
- c# - WPF如何在用户控件和主视图之间绑定数据?
- sql - 使用 T-SQL 查询从 XML 中提取数据
- mysql - Node.JS,获取功能和连接到 XAMPP DB 不起作用
- groovy - 在 0.229 构建 presto 时出现常规异常
- ios - ios13如何实现可扩展企业单点登录
- reactjs - RangeError: Invalid typed array length: -4095 when running my react web app
- c++ - 如果我在各自的 char 数组的声明中为其提供额外的元素,是否会自动设置 NUL?
- django - 将 Python 应用部署到 Windows Server 上的 Azure 应用服务
- node.js - (discord.js) 为作者添加角色