PL/SQL - 如何根据最新创建日期从 3 个表中提取数据
我希望有人可以帮助我,因为我已经被这个问题困扰了几天。基本上我试图从Oracle中的3个表中提取数据:1)订单表2)供应商表和3)主数据表。
这 3 个表如下所示:
表 1:BIZ_DOC2(订单表)
OBJECTID(唯一键)
UNIQUE_DOC_NAME(文档名称,即 ORD-005)
CREATED_AT(订单创建日期)
表 2:UDEF_VENDOR(供应商表):
PARENT_OBJECT_ID(这与订单表中的 OBJECTID 匹配)
VENDOR_OBJECT_NAME(这是供应商的名称,即 Acme)
表 3:BIZ_UNIT(主数据表)
PARENT_OBJECT_ID(与订单表中的 OBJECTID 匹配)
BIZ_UNIT_OBJECT_NAME(这是业务单位的名称,即小部件 A、小部件 B)
供应商表和主数据之间没有链接。
注意:除了通过订单表之外, 表中的数据看起来像这样:
在选择最新订单日期之前:
ORD-005 |小工具A |极致| 2010 年 3 月 14 日
ORD-005 |小部件 B |极致| 2010 年 3 月 14 日
ORD-004 |小部件 C |极致| 2010 年 3 月 10 日
理想情况下,我想返回每个供应商的最新订单。但是,每个订单可能包含多个业务单位(例如小部件类型),因此如果供应商的最新记录是 ORD-005 并且订单包含 2 个业务单位,则结果集应如下所示:UNIQUE_DOC_NAME、BIZ_UNIT_OBJECT_NAME、 VENDOR_OBJECT_NAME,CREATED_AT
按最新订单日期选择后:
ORD-005 |小工具A |极致| 2010 年 3 月 14 日
ORD-005 |小部件 B |极致| 2010 年 3 月 14 日,
我尝试使用 Select Max 和子查询的几种变体,但我似乎无法让它工作。任何帮助将不胜感激!
I'm hoping someone can help me as I've been stuck on this problem for a few days now. Basically I'm trying to pull data from 3 tables in Oracle: 1) Orders Table 2) Vendor Table and 3) Master Data Table.
Here's what the 3 tables look like:
Table 1: BIZ_DOC2 (Orders table)
OBJECTID (Unique key)
UNIQUE_DOC_NAME (Document Name i.e. ORD-005)
CREATED_AT (Date the order was created)
Table 2: UDEF_VENDOR (Vendors table):
PARENT_OBJECT_ID (This matches up to the OBJECTID in the Orders table)
VENDOR_OBJECT_NAME (This is the name of the vendor i.e. Acme)
Table 3: BIZ_UNIT (Master Data table)
PARENT_OBJECT_ID (This matches up to the OBJECTID in the Orders table)
BIZ_UNIT_OBJECT_NAME (This is the name of the business unit i.e. widget A, widget B)
Note: The Vendors Table and Master Data do not have a link between them except through the Orders table.
I can join all of the data from the tables and it looks something like this:
Before selecting latest order date:
ORD-005 | Widget A | Acme | 3/14/10
ORD-005 | Widget B | Acme | 3/14/10
ORD-004 | Widget C | Acme | 3/10/10
Ideally I'd like to return the latest order for each vendor. However, each order may contain multiple business units (e.g. types of widgets) so if a Vendor's latest record is ORD-005 and the order contains 2 business units, here's what the result set should look like by the following columns: UNIQUE_DOC_NAME, BIZ_UNIT_OBJECT_NAME, VENDOR_OBJECT_NAME, CREATED_AT
After selecting by latest order date:
ORD-005 | Widget A | Acme | 3/14/10
ORD-005 | Widget B | Acme | 3/14/10
I tried using Select Max and several variations of sub-queries but I just can't seem to get it working. Any help would be hugely appreciated!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这是使用解析函数的另一种解决方案。它不是获取最大日期的第一个值,而是对日期进行排名并获取最新日期的所有值。
Here's another solution using analytic functions. Instead of getting the first value for the max date, it ranks the dates and gets all values for the latest date.