Firebird MySQL 中聚合函数 FIRST 和 LAST 的等价物是什么

What is the equivalent of aggregate functions FIRST and LAST from MySQL in Firebird

有谁知道 MySQL 到 Firebird 的聚合函数 FIRST 和 LAST 的等价物。我有这个库存管理器 table,看起来像这样:

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

我有这个 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

结果应该如下所示:

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

但我在使用 FIRST 和 LAST 聚合函数时遇到问题,我使用的是 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_QTY,以及该项目的最高日期。