早上好,
我正在努力完成比我的专业水平更高的事情。感谢网站上的一些人,我的Oracle-SQL技能已经大大增加,但我想采取新的措施。
我有四个表 - 采购订单表,产品供应商表,缺陷表和零件表。
我公司有三个“部门”(拆除(A),混凝土(B)和建筑(C))。我想查看针对特定部门购买的部件的所有缺陷。我在下面有一个工作查询。我的问题是,我们有时会为同一部分设置多个PO - 有时我们会出于任何原因切换供应商(这是在物流团队,而不是我;))所以我最终会得到这样的东西:
请注意,有两行,不同的供应商,但其他一切都相同。我只想要最近购买的部分。我正在过滤一个采购订单日期。这是查询:
WITH
PartNums AS -- Grabs me all of the stuff we "bought", and its vendor, in the construction division since Jan 1 2018
(
SELECT
PO_ITEM AS "PART_NUM",
VEND_NUM,
VEND_NM,
PODiv AS "DIVISION_CD"
FROM
tblPurchases
INNER JOIN tblVendors ON tblPurchased.VEND_NUM = tblVendors.VEND_NUM
WHERE
PODate >= '01-Jan-2018'
AND
PODiv = 'C'
),
Defects AS -- Grabs me the listed defects against their stuff
(
SELECT
PartNums.*,
DEFECT_NUM,
DEFECT_CAT
FROM
PartNums
INNER JOIN tblDefects ON PartNums.PART_NUM = tblDefects.DEFECTIVE_PART_NUM
),
Names AS -- Grabs me the name of the part we are buying
(
SELECT
Defects.*,
PART_NM
FROM
Defects
INNER JOIN tblParts ON Defects.PART_NUM = tblParts.PART_NUM
)
SELECT
VEND_NUM,
VEND_NM,
PART_NUM,
PART_NM,
DEFECT_NUM,
DEFECT_CAT,
DIVISION_CD
FROM Names
基本上,我想做的是,如果有多个供应商提供单一部件号,只需抓住最新的......有谁知道怎么做?我尝试了SELECT DISTINCT,但没有区别...... :(
非常感谢任何帮助。
答案 0 :(得分:0)
这是一种格式化的评论。要获取最新的内容,您需要在某处使用子查询。
where yourDate = (subquery to find more recent date)
或
from yourTable join (
subquery to get most recent date
plus a recordId
) temp on yourTable.recordID = temp.recordID
and yourTable.yourDate = temp.mostRecentDate
细节取决于你。
答案 1 :(得分:0)
使用rank()之类的分析函数来排序组中的日期。
Rank()结束(按order_column desc分组grouping_column顺序)为my_rank
然后,在外部查询中只获得排名靠前的值
my_rank = 1
抱歉,这格式化,但第一次通过我的手机回答。