我在存储过程中遇到了以下问题:
for
select 1
from scan_queue
where ( date_time_locked is null )
and ( scan_seqno >= :varMinScanSeqno )
and ( scan_seqno <= :varMaxScanSeqno )
group by loan_id, collateral_id, insurance_id
into varNotUsed
do
varItemsToScan = varItemsToScan + 1;
我的第一个想法是,这可能是一种计算组数的低效方法,但我的第二个想法是,“嘿,无论如何,你将如何在单个查询中编写它?” 我没有一个好的答案。(所以这更像是一个学术问题。)我不是在寻找连接 ID 的解决方案,如下所示:
select count(distinct loan_id || collateral_id || insurance_id)
from scan_queue
where ( date_time_locked is null )
and ( scan_seqno >= :varMinScanSeqno )
and ( scan_seqno <= :varMaxScanSeqno )
查询此信息的最佳方法是什么?
编辑:由于我显然没有说得足够清楚,所以我使用的是 Firebird v1.5。