Я наткнулся на следующее в хранимой процедуре:
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;
Моей первой мыслью было, что это, вероятно, неэффективный способ подсчета количества групп, но моей второй мыслью было: «Эй, как бы ты записал это в одном запросе? И у меня не было хорошего ответа. (Так что это скорее академический вопрос.) Я не ищу решение, объединяющее идентификаторы, например:
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.