Я хотел бы сделать что-то вроде этого:В Firebird, как собрать первые N строк?
CNT=2;
//[edit]
select avg(price) from (
select first :CNT p.Price
from Price p
order by p.Date desc
);
Это не работает, Firebird не позволяет :cnt
в качестве параметра FIRST. Мне нужно усреднить первые цены на CNT. Число 2 изменяется, поэтому оно не может быть жестко закодировано.
Это может быть разбито на цикл FOR SELECT и разрываться, когда счетчик достигнут. Это лучший способ? Можно ли это сделать в одном выражении SQL?
Создание SQL как строки и запуск ее также не подходит. Важно, чтобы база данных скомпилировала мою инструкцию SQL.
Firebird отклоняет это с помощью «Token unknown» и указывает на ':' перед переменной cnt. Другими словами, он не принимает переменную как параметр 'FIRST'. – jcalfee314
Ваш пример лучше, поэтому я обновил вопрос ... – jcalfee314
': variable' будет работать только в PSQL, очевидно. Иначе вы не можете определить переменную. Или, альтернативно, вы можете использовать параметры на основе вашего провайдера. То есть в .NET вы можете написать 'select first @cnt ...' и определить параметр в' FbCommand'. –