我願做這樣的事情:在Firebird中,如何聚合前N行?
CNT=2;
//[edit]
select avg(price) from (
select first :CNT p.Price
from Price p
order by p.Date desc
);
這不起作用,火鳥不允許:cnt
作爲參數傳遞給第一位。我需要平均第一個CNT最新價格。數字2發生變化,因此無法進行硬編碼。
這可以分解爲FOR SELECT循環並在達到計數時中斷。那是最好的方法嗎?這可以在單個SQL語句中完成嗎?
將SQL創建爲字符串並運行它也不是最合適的。數據庫編譯我的SQL語句很重要。
Firebird拒絕使用「令牌未知」並指向變量cnt之前的':'。換句話說,它不接受變量作爲「FIRST」的參數。 – jcalfee314
你的例子更好,所以我已經更新了這個問題...... – jcalfee314
':variable'顯然只能在PSQL中工作。否則你不能定義變量。或者,您也可以使用基於您的提供商的參數。即在.NET中,您可以編寫'select first @cnt ...'並在'FbCommand'中定義參數。 –