2013-05-17 33 views
0

我有一个简单的表:SQL:获取聚合函数中的第一个条目?

ID - JID - AMOUNT 
1 - 1 - 100 
2 - 2 - 50 
3 - 2 - -25 
4 - 3 - 100 
5 - 3 - -50 

我想结束了:

JID - FIRSTBALANCE 
1 - 100 
2 - 50 
3 - 100 

由于火鸟是当它涉及到汇聚如此疯狂的困难,这不起作用:

SELECT jid, amount as firstBalance 
FROM table 
GROUP BY jid 

我怎样才能得到它,它按JID和firstbalance的值自动设置为在表中的第一个值?

回答

-1

这就是我一直在寻找:

SELECT jid, max(amount) as firstBalance 
FROM table 
GROUP BY jid 
+1

不,这是不是你所期待的。您正在寻找聚合开始时的第一个值,而不是最大值。 – TomeeNS

2

取决于你是什么意思与“自动firstbalance的值设置为表中的第一个值”做。从你给了想要的结果的例子,我还以为你考虑与最低ID值的行给定JID组“第一”,让

SELECT DISTINCT JID, 
    (SELECT amount FROM table s WHERE s.JID = o.JID ORDER BY s.ID ROWS 1) 
FROM table o 

应该工作。

0

火鸟不包含first()last()聚合函数。球队已经要求并拒绝了这个项目,因为哪个项目会被选中。您需要为汇总的项目指定order by子句。

你选择的答案让你的max(amount)不是first(amount)。这不是你所要求的(尽管可能它是你想要的)。

对于未来的Google员工/酗酒者,您可以通过以下方式获取第一件物品。这不是一个了不起的解决方案,它可能会很慢。

select distinct a.jid, 
     (select first 1 b.amount 
     from table b 
     where b.jid = a.jid 
     order by b.id) as amount 
from table a 
order by a.jid 

它将检索三个JID字段和由ID顺序确定的第一个找到的金额。

不要屏住呼吸,让它融入Firebird。当被问到过去的位置集合时,回复如下:

我对这个概念有很大的麻烦,因为位置不是一个关系概念,位置操作符的引入将显着地抑制改进工作通过并行执行操作的性能。