Sql 如何按日期获取最后一项价格

Sql 如何按日期获取最后一项价格,sql,greatest-n-per-group,firebird,firebird2.5,Sql,Greatest N Per Group,Firebird,Firebird2.5,我有3张桌子在玩: 订单标题为T_OH(ID,日期) 订单详细信息(ID、OH\U ID、项目类型、项目代码、价格) 作为T_项目的项目详细信息(项目类型、项目代码、项目名称、项目条形码) 我需要得到所有不同的项目在T.OD,但最后的价格日期。表之间具有相同名称的字段是连接,在T_OD(OH_ID)中是与T_OH(ID)的连接 我需要从T.OH获得T\U OD中每个不同项目的最新价格。 我现在要讲的代码是: SELECT T_OD.Item_Type, T_OD.Item_Code, T_I

我有3张桌子在玩:

  • 订单标题为T_OH(ID,日期)
  • 订单详细信息(ID、OH\U ID、项目类型、项目代码、价格)
  • 作为T_项目的项目详细信息(项目类型、项目代码、项目名称、项目条形码)
我需要得到所有不同的项目在T.OD,但最后的价格日期。表之间具有相同名称的字段是连接,在T_OD(OH_ID)中是与T_OH(ID)的连接

我需要从T.OH获得T\U OD中每个不同项目的最新价格。 我现在要讲的代码是:

SELECT T_OD.Item_Type, T_OD.Item_Code, T_Item.Item_Name, T_Item.Item_Barcode, T_OD.Price
FROM T_OD
LEFT JOIN T_OH ON T_OD.OH_ID=T_OH.ID
LEFT JOIN T_Item ON T_Item.Item_Type=T_OD.Item_Type AND T_Item.Item_Code=T_OD.Item_Code
ORDER BY T_OH.DATE DESC

您似乎只需要前两个表就可以获得每件商品的最新价格。不幸的是,我认为Firebird 2.5不支持窗口功能,因此:

select od.item_code, od.price
from t_od od join
     t_oh oh
     on oh.id = od.oh_id
where oh.date = (select max(oh2.date)
                 from t_oh oh2 join
                      t_od od2
                      on oh2.id = od2.oh_id
                 where od2.item_code = od.item_code 
                );

没错,Firebird 3中引入了窗口函数。