【发布时间】:2009-08-19 19:45:55
【问题描述】:
我在存储过程中遇到了以下问题:
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。
【问题讨论】:
-
我把 Firebird 作为一个标签,但为了澄清,我对一个与 Firebird 1.5+ RDBMS 一起工作的解决方案特别感兴趣。 :)
-
此评论非常重要,足以成为问题的一部分!我什至不知道 Firebird 是一种 DB 类型! :)
-
@Aviad,我根据您的建议更新了问题。感谢您的评论,因为我在这里相对较新,并且认为标签就足够了(这实际上是我的第一个问题)。
标签: sql count firebird distinct