Firebird中MySQL的聚合函数的第一个和最后一个等价物是什么

Firebird中MySQL的聚合函数的第一个和最后一个等价物是什么,sql,firebird,Sql,Firebird,有人知道从MySQL到Firebird的聚合函数的等价物是什么吗。我的库存主表如下所示: DATE |ITEM_CODE | BEG | + | - | - | - | + | + | + | + | - | - | END 2015-10-27 | 000000000MS016 |12.5 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 12.5 2015-10-27 | 000000000PN044 | 0 |10 | 0 |

有人知道从MySQL到Firebird的聚合函数的等价物是什么吗。我的库存主表如下所示:

DATE       |ITEM_CODE       | BEG | + | - | - | - | + | + | + | + | - | - | END
2015-10-27 | 000000000MS016 |12.5 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 12.5
2015-10-27 | 000000000PN044 |   0 |10 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |   10 
2015-10-27 | 000000000VI064 | 440 | 5 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |  445 
2015-10-27 | 000000000VI029 | 274 | 0 | 5 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |  269

2015-10-28 | 000000000MS016 |12.5 |20 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 32.5
2015-10-28 | 000000000PN044 |  10 |50 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |   60 
2015-10-28 | 000000000VI064 | 445 | 0 | 0 |10 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |  435 
2015-10-28 | 000000000VI029 | 269 | 0 | 0 | 0 |20 | 0 | 0 | 0 | 0 | 0 | 0 |  249

2015-10-29 | 000000000MS016 |32.5 | 0 |10 | 0 | 0 | 0 | 0 | 0 |30 | 0 | 5 | 47.5
2015-10-29 | 000000000PN044 |  60 | 5 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |   65 
2015-10-29 | 000000000VI064 | 435 | 0 | 0 | 0 | 0 |10 | 0 | 0 | 0 | 8 | 0 |  437 
2015-10-29 | 000000000VI029 | 249 |35 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 4 |  280

2015-10-30 | 000000000MS016 |47.5 | 0 |15 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 32.5
2015-10-30 | 000000000PN044 |  65 | 5 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 5 | 0 |   65 
2015-10-30 | 000000000VI064 | 437 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |  437 
2015-10-30 | 000000000VI029 | 280 | 0 | 5 | 0 | 5 | 0 | 0 | 6 | 0 | 3 | 0 |  273
ITEM_CODE      | BEG | + | - | - | - | + | + | + | + | - | - | END    
000000000MS016 |12.5 |20 |25 | 0 | 0 | 0 | 0 | 0 |30 | 0 | 5 | 32.5
000000000PN044 |   0 |70 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 5 | 0 |   65 
000000000VI064 | 440 | 5 | 0 |10 | 0 |10 | 0 | 0 | 0 | 8 | 0 |  437 
000000000VI029 | 274 |35 |10 | 0 |25 | 0 | 0 | 6 | 0 | 3 | 4 |  273
我有一个
SELECT
子句:

SELECT
  INV.ITEM_CODE,
  FIRST(INV.BEG_QTY) AS BEG_QTY,
  SUM(INV.REC_QTY) AS REC_QTY,
  SUM(INV.RET_QTY) AS RET_QTY,
  SUM(INV.SOLD_QTY) AS SOLD_QTY,
  SUM(INV.BO_QTY) AS BO_QTY,
  SUM(INV.ADJ_QTY) AS ADJ_QTY,
  SUM(INV.COUNT_P) AS COUNT_P,
  SUM(INV.COUNT_C) AS COUNT_C,
  SUM(INV.TRANS_IN) AS TRANS_IN,
  SUM(INV.TRANS_OUT) AS TRANS_OUT,
  SUM(INV.DELIVERY) AS DELIVERY,
  LAST(INV.END_QTY) AS END_QTY
FROM INV_MASTER INV
WHERE (INV.INV_DATE BETWEEN '2015-10-27' AND '2015-10-31')
GROUP BY INV.ITEM_CODE
ORDER BY INV.ITEM_CODE
结果应该是这样的:

DATE       |ITEM_CODE       | BEG | + | - | - | - | + | + | + | + | - | - | END
2015-10-27 | 000000000MS016 |12.5 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 12.5
2015-10-27 | 000000000PN044 |   0 |10 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |   10 
2015-10-27 | 000000000VI064 | 440 | 5 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |  445 
2015-10-27 | 000000000VI029 | 274 | 0 | 5 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |  269

2015-10-28 | 000000000MS016 |12.5 |20 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 32.5
2015-10-28 | 000000000PN044 |  10 |50 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |   60 
2015-10-28 | 000000000VI064 | 445 | 0 | 0 |10 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |  435 
2015-10-28 | 000000000VI029 | 269 | 0 | 0 | 0 |20 | 0 | 0 | 0 | 0 | 0 | 0 |  249

2015-10-29 | 000000000MS016 |32.5 | 0 |10 | 0 | 0 | 0 | 0 | 0 |30 | 0 | 5 | 47.5
2015-10-29 | 000000000PN044 |  60 | 5 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |   65 
2015-10-29 | 000000000VI064 | 435 | 0 | 0 | 0 | 0 |10 | 0 | 0 | 0 | 8 | 0 |  437 
2015-10-29 | 000000000VI029 | 249 |35 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 4 |  280

2015-10-30 | 000000000MS016 |47.5 | 0 |15 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 32.5
2015-10-30 | 000000000PN044 |  65 | 5 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 5 | 0 |   65 
2015-10-30 | 000000000VI064 | 437 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |  437 
2015-10-30 | 000000000VI029 | 280 | 0 | 5 | 0 | 5 | 0 | 0 | 6 | 0 | 3 | 0 |  273
ITEM_CODE      | BEG | + | - | - | - | + | + | + | + | - | - | END    
000000000MS016 |12.5 |20 |25 | 0 | 0 | 0 | 0 | 0 |30 | 0 | 5 | 32.5
000000000PN044 |   0 |70 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 5 | 0 |   65 
000000000VI064 | 440 | 5 | 0 |10 | 0 |10 | 0 | 0 | 0 | 8 | 0 |  437 
000000000VI029 | 274 |35 |10 | 0 |25 | 0 | 0 | 6 | 0 | 3 | 4 |  273

但是第一个和最后一个聚合函数有问题,我使用的是firebird v2.5。我该怎么做

您应该能够将
LAST
的使用替换为

(SELECT END_QTY FROM INV_MASTER 
   WHERE ITEM_CODE = INV.ITEM_CODE 
   AND INV_DATE = MAX(INV.INV_DATE)) AS END_QTY

这将选择当前项目的
END\u数量
,以及该项目的最高日期。

FIRST&LAST不是标准的,因为表中没有订单,只有外部订单之后的最终结果。您从哪个版本的SQL中了解它们?你希望他们做什么?为什么不使用日期的最小值和最大值?@philipxy我刚刚在某个地方读到了它,第一个应该得到它从结果中得到的第一个值(在我的例子中是来自
INV_DATE 2015-10-27
),最后一个应该得到最后一个值(
INV_DATE 2015-10-30
)。那么你认为我的问题应该是什么呢?你还没有清楚地说出“第一个”和“最后一个”是什么意思。当表格无序时,“第一个值”是什么?也许和约会有关?您的输入是否以某种方式进行排序,并且您是否对该顺序感兴趣?我仍然看不出作为输入函数的输出是什么。请完成这句话:当…&“代码>日期”和对输入进行了一次输入。<代码>日期******日期******日期***日期******日期***日期***日期***和对输入进行了一次输入。<代码>日期***>日期***::***日期***::***日期:***日期:***日期:***日期:***日期***日期***日期:***日期***日期:***日期***:***日期***日期:***日期:***日期:***日期::***日期:***日期:***日期:***日期::***日期::***日期:***日期::::***日期:***日期::***日期:::::***日期***日期:::***日期:***日期::***日期::******日期::***日期::***日期:******日期::::::***日期::*********日期:::::::******|0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 30 | 0|5 | 47.5***2015-10-30 | 000000000 MS016 | 47.5 | 0 | 15 | 0 | 0 | 0 | 0 | 0 | 32.5***@philipxy让我们假设我输入/查询从
2015-10-27
2015-10-31到
2015-10-31的库存日期,并选择
FIRST(库存数量和其他库存的总和)
000000000 MS016 | MS RHS 50 X 150 X 3MM X 6M |长|无|
12.5
20 | 25 | 0 | 0 | 0 | 0 | 30 | 0 | 5 |
32.5@philipxy我期待结果会是这样的。12.5是从第一个日期开始的
2015-10-27
,而32.5是从最后一个日期开始的
2015-10-30