Sql 如何按日期获取最后一项价格
我有3张桌子在玩: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
- 订单标题为T_OH(ID,日期)
- 订单详细信息(ID、OH\U ID、项目类型、项目代码、价格)
- 作为T_项目的项目详细信息(项目类型、项目代码、项目名称、项目条形码)
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中引入了窗口函数。