你好,我这里有一个问题:
SELECT Erp.QuoteDtl.Company
,Erp.OrderHed.ShipToNum
,Erp.OrderHed.PONum
,Erp.OrderDtl.PartNum
,Erp.OrderHed.OrderNum
,Erp.OrderHed.OrderDate
,Erp.QuoteDtl.QuoteNum
,Erp.QuoteHed.DateQuoted
,Erp.QuoteHed.ExpirationDate
,Erp.Customer.CustID
FROM Erp.OrderHed
INNER JOIN Erp.Customer ON Erp.OrderHed.Company = Erp.Customer.Company
AND Erp.OrderHed.CustNum = Erp.Customer.CustNum
INNER JOIN Erp.OrderDtl ON Erp.OrderHed.Company = Erp.OrderDtl.Company
AND Erp.OrderHed.OrderNum = Erp.OrderDtl.OrderNum
AND Erp.OrderHed.CustNum = Erp.OrderDtl.CustNum
INNER JOIN Erp.QuoteDtl ON Erp.OrderHed.Company = Erp.QuoteDtl.Company
AND Erp.OrderDtl.PartNum = Erp.QuoteDtl.PartNum
INNER JOIN Erp.QuoteHed ON Erp.OrderHed.Company = Erp.QuoteHed.Company
INNER JOIN Erp.Part ON Erp.OrderHed.Company = Erp.Part.Company
AND Erp.OrderDtl.PartNum = Erp.Part.PartNum
WHERE (Erp.OrderHed.OrderDate >= '6/15/2021')
AND (Erp.QuoteHed.DateQuoted <= '2021-06-15')
AND (Erp.QuoteHed.ExpirationDate >= '2021-06-15')
AND (Erp.QuoteDtl.Company = N'CYT')
GROUP BY OrderDtl.PartNum
,Erp.QuoteDtl.Company
,Erp.OrderHed.ShipToNum
,Erp.OrderHed.PONum
,Erp.OrderDtl.PartNum
,Erp.OrderHed.OrderNum
,Erp.OrderHed.OrderDate
,Erp.QuoteDtl.QuoteNum
,Erp.QuoteHed.DateQuoted
,Erp.QuoteHed.ExpirationDate
,Erp.Customer.CustID
ORDER BY QuoteNum目前仍在尝试构建它,这是我得到的结果

因此,我的目标是为最新的DateQuoted仅选择1个PartNum
因此,在本例中,它将仅显示PartNum的1行
期望的结果将是
CYT | NKP | 188719 | 26251-RJ2-0000 | 207504 | 11373 | 2021-06-01
CYT | BAC | 188719 | 18130-TLA-0000 | 207509 | 12250 | 2021-06-01然后在具有相同概念的那个下添加一个新的部分。
发布于 2021-06-16 21:06:05
要获得每个cust_id和零件编号的单行,可以使用row_number()排名窗口函数,如下所示:
WITH CTE AS
(
SELECT Erp.QuoteDtl.Company, Erp.OrderHed.ShipToNum, Erp.OrderHed.PONum, Erp.OrderDtl.PartNum, Erp.OrderHed.OrderNum, Erp.OrderHed.OrderDate, Erp.QuoteDtl.QuoteNum, Erp.QuoteHed.DateQuoted, Erp.QuoteHed.ExpirationDate,
Erp.Customer.CustID,ROW_NUMBER()OVER(PARTITION BY Erp.Customer.CustID, Erp.OrderDtl.PartNum ORDER BY DateQuoted desc )RNK
FROM Erp.OrderHed INNER JOIN
Erp.Customer ON Erp.OrderHed.Company = Erp.Customer.Company AND Erp.OrderHed.CustNum = Erp.Customer.CustNum INNER JOIN
Erp.OrderDtl ON Erp.OrderHed.Company = Erp.OrderDtl.Company AND Erp.OrderHed.OrderNum = Erp.OrderDtl.OrderNum AND Erp.OrderHed.CustNum = Erp.OrderDtl.CustNum INNER JOIN
Erp.QuoteDtl ON Erp.OrderHed.Company = Erp.QuoteDtl.Company AND Erp.OrderDtl.PartNum = Erp.QuoteDtl.PartNum INNER JOIN
Erp.QuoteHed ON Erp.OrderHed.Company = Erp.QuoteHed.Company INNER JOIN
Erp.Part ON Erp.OrderHed.Company = Erp.Part.Company AND Erp.OrderDtl.PartNum = Erp.Part.PartNum
WHERE (Erp.OrderHed.OrderDate >= '6/15/2021') AND (Erp.QuoteHed.DateQuoted <= '2021-06-15') AND (Erp.QuoteHed.ExpirationDate >= '2021-06-15') AND (Erp.QuoteDtl.Company = N'CYT')
Group by OrderDtl.PartNum, Erp.QuoteDtl.Company, Erp.OrderHed.ShipToNum, Erp.OrderHed.PONum, Erp.OrderDtl.PartNum, Erp.OrderHed.OrderNum, Erp.OrderHed.OrderDate, Erp.QuoteDtl.QuoteNum, Erp.QuoteHed.DateQuoted, Erp.QuoteHed.ExpirationDate, Erp.Customer.CustID
)
SELECT Erp.QuoteDtl.Company, Erp.OrderHed.ShipToNum, Erp.OrderHed.PONum, Erp.OrderDtl.PartNum, Erp.OrderHed.OrderNum, Erp.OrderHed.OrderDate, Erp.QuoteDtl.QuoteNum, Erp.QuoteHed.DateQuoted, Erp.QuoteHed.ExpirationDate, Erp.Customer.CustID
FROM CTE
WHERE RNK=1如果您使用的是sql order by DateQuoted desc,则可以使用top 1 server。
SELECT TOP 1 Erp.QuoteDtl.Company
,Erp.OrderHed.ShipToNum
,Erp.OrderHed.PONum
,Erp.OrderDtl.PartNum
,Erp.OrderHed.OrderNum
,Erp.OrderHed.OrderDate
,Erp.QuoteDtl.QuoteNum
,Erp.QuoteHed.DateQuoted
,Erp.QuoteHed.ExpirationDate
,Erp.Customer.CustID
FROM Erp.OrderHed
INNER JOIN Erp.Customer ON Erp.OrderHed.Company = Erp.Customer.Company
AND Erp.OrderHed.CustNum = Erp.Customer.CustNum
INNER JOIN Erp.OrderDtl ON Erp.OrderHed.Company = Erp.OrderDtl.Company
AND Erp.OrderHed.OrderNum = Erp.OrderDtl.OrderNum
AND Erp.OrderHed.CustNum = Erp.OrderDtl.CustNum
INNER JOIN Erp.QuoteDtl ON Erp.OrderHed.Company = Erp.QuoteDtl.Company
AND Erp.OrderDtl.PartNum = Erp.QuoteDtl.PartNum
INNER JOIN Erp.QuoteHed ON Erp.OrderHed.Company = Erp.QuoteHed.Company
INNER JOIN Erp.Part ON Erp.OrderHed.Company = Erp.Part.Company
AND Erp.OrderDtl.PartNum = Erp.Part.PartNum
WHERE (Erp.OrderHed.OrderDate >= '6/15/2021')
AND (Erp.QuoteHed.DateQuoted <= '2021-06-15')
AND (Erp.QuoteHed.ExpirationDate >= '2021-06-15')
AND (Erp.QuoteDtl.Company = N'CYT')
GROUP BY OrderDtl.PartNum
,Erp.QuoteDtl.Company
,Erp.OrderHed.ShipToNum
,Erp.OrderHed.PONum
,Erp.OrderDtl.PartNum
,Erp.OrderHed.OrderNum
,Erp.OrderHed.OrderDate
,Erp.QuoteDtl.QuoteNum
,Erp.QuoteHed.DateQuoted
,Erp.QuoteHed.ExpirationDate
,Erp.Customer.CustID
ORDER BY DateQuoted DESC如果您使用的是MySQL,那么它将是
SELECT Erp.QuoteDtl.Company
,Erp.OrderHed.ShipToNum
,Erp.OrderHed.PONum
,Erp.OrderDtl.PartNum
,Erp.OrderHed.OrderNum
,Erp.OrderHed.OrderDate
,Erp.QuoteDtl.QuoteNum
,Erp.QuoteHed.DateQuoted
,Erp.QuoteHed.ExpirationDate
,Erp.Customer.CustID
FROM Erp.OrderHed
INNER JOIN Erp.Customer ON Erp.OrderHed.Company = Erp.Customer.Company
AND Erp.OrderHed.CustNum = Erp.Customer.CustNum
INNER JOIN Erp.OrderDtl ON Erp.OrderHed.Company = Erp.OrderDtl.Company
AND Erp.OrderHed.OrderNum = Erp.OrderDtl.OrderNum
AND Erp.OrderHed.CustNum = Erp.OrderDtl.CustNum
INNER JOIN Erp.QuoteDtl ON Erp.OrderHed.Company = Erp.QuoteDtl.Company
AND Erp.OrderDtl.PartNum = Erp.QuoteDtl.PartNum
INNER JOIN Erp.QuoteHed ON Erp.OrderHed.Company = Erp.QuoteHed.Company
INNER JOIN Erp.Part ON Erp.OrderHed.Company = Erp.Part.Company
AND Erp.OrderDtl.PartNum = Erp.Part.PartNum
WHERE (Erp.OrderHed.OrderDate >= '6/15/2021')
AND (Erp.QuoteHed.DateQuoted <= '2021-06-15')
AND (Erp.QuoteHed.ExpirationDate >= '2021-06-15')
AND (Erp.QuoteDtl.Company = N'CYT')
GROUP BY OrderDtl.PartNum
,Erp.QuoteDtl.Company
,Erp.OrderHed.ShipToNum
,Erp.OrderHed.PONum
,Erp.OrderDtl.PartNum
,Erp.OrderHed.OrderNum
,Erp.OrderHed.OrderDate
,Erp.QuoteDtl.QuoteNum
,Erp.QuoteHed.DateQuoted
,Erp.QuoteHed.ExpirationDate
,Erp.Customer.CustID
ORDER BY DateQuoted DESC Limit 1发布于 2021-06-16 21:10:32
可以在DateQuoted上使用max()函数,将其从group by语句中删除。
发布于 2021-06-16 21:26:03
正如@fra所解释的:使用max应该是可行的
SELECT Erp.QuoteDtl.Company
,Erp.OrderHed.ShipToNum
,Erp.OrderHed.PONum
,Erp.OrderDtl.PartNum
,Erp.OrderHed.OrderNum
,Erp.OrderHed.OrderDate
,Erp.QuoteDtl.QuoteNum
,max(Erp.QuoteHed.DateQuoted)
,Erp.QuoteHed.ExpirationDate
,Erp.Customer.CustID
FROM Erp.OrderHed
INNER JOIN Erp.Customer ON Erp.OrderHed.Company = Erp.Customer.Company
AND Erp.OrderHed.CustNum = Erp.Customer.CustNum
INNER JOIN Erp.OrderDtl ON Erp.OrderHed.Company = Erp.OrderDtl.Company
AND Erp.OrderHed.OrderNum = Erp.OrderDtl.OrderNum
AND Erp.OrderHed.CustNum = Erp.OrderDtl.CustNum
INNER JOIN Erp.QuoteDtl ON Erp.OrderHed.Company = Erp.QuoteDtl.Company
AND Erp.OrderDtl.PartNum = Erp.QuoteDtl.PartNum
INNER JOIN Erp.QuoteHed ON Erp.OrderHed.Company = Erp.QuoteHed.Company
INNER JOIN Erp.Part ON Erp.OrderHed.Company = Erp.Part.Company
AND Erp.OrderDtl.PartNum = Erp.Part.PartNum
WHERE (Erp.OrderHed.OrderDate >= '6/15/2021')
AND (Erp.QuoteHed.DateQuoted <= '2021-06-15')
AND (Erp.QuoteHed.ExpirationDate >= '2021-06-15')
AND (Erp.QuoteDtl.Company = N'CYT')
GROUP BY OrderDtl.PartNum
,Erp.QuoteDtl.Company
,Erp.OrderHed.ShipToNum
,Erp.OrderHed.PONum
,Erp.OrderDtl.PartNum
,Erp.OrderHed.OrderNum
,Erp.OrderHed.OrderDate
,Erp.QuoteDtl.QuoteNum
,Erp.QuoteHed.ExpirationDate
,Erp.Customer.CustID
ORDER BY QuoteNumhttps://stackoverflow.com/questions/68002786
复制相似问题