我正在处理30天以上帐户的账龄报告,我正在加入"评论"表,因为如果客户存在,AP希望查看最新评论。
对于附加到该客户的每条评论,评论表可以为同一客户提供多行,第一条记录是最早的评论。
当我加入表时,一切正常,但它返回的第一条评论不是最新的。
如何让它为同一客户查找多行,然后返回最新评论?
*注意 - 评论表没有日期只是一个字段从1000开始并且每个新评论行都会增加
这就是我现在所拥有的:
SELECT
dbo.[Pioneer-CO$Purchase Header].No_,
dbo.[Pioneer-CO$Purchase Line].[Amt_ Rcd_ Not Invoiced],
dbo.[Pioneer-CO$Purch_ Rcpt_ Header].[Posting Date],
dbo.[Pioneer-CO$Comment Line].[Comment],
dbo.[Pioneer-CO$Purchase Header].[Sell-to Customer No_]
FROM
dbo.[Pioneer-CO$Purchase Header]
INNER JOIN
dbo.[Pioneer-CO$Purchase Line] ON dbo.[Pioneer-CO$Purchase Header].No_ = dbo.[Pioneer-CO$Purchase Line].[Document No_]
INNER JOIN
dbo.[Pioneer-CO$Purch_ Rcpt_ Header] ON dbo.[Pioneer-CO$Purchase Header].No_ = dbo.[Pioneer-CO$Purch_ Rcpt_ Header].[Order No_]
INNER JOIN
dbo.[Pioneer-CO$Comment Line] ON dbo.[Pioneer-CO$Purchase Header].[Sell-to Customer No_] = dbo.[Pioneer-CO$Comment Line].[No_]
WHERE
(dbo.[Pioneer-CO$Purch_ Rcpt_ Header].[Posting Date] < DATEADD(day, - 30, GETDATE()))
GROUP BY
dbo.[Pioneer-CO$Purchase Header].No_,
dbo.[Pioneer-CO$Purchase Line].[Amt_ Rcd_ Not Invoiced],
dbo.[Pioneer-CO$Purch_ Rcpt_ Header].[Posting Date],
dbo.[Pioneer-CO$Comment Line].[Comment],
dbo.[Pioneer-CO$Purchase Header].[Sell-to Customer No_]
HAVING
(dbo.[Pioneer-CO$Purchase Line].[Amt_ Rcd_ Not Invoiced] > '0')
ORDER BY
dbo.[Pioneer-CO$Purch_ Rcpt_ Header].[Posting Date] DESC
答案 0 :(得分:1)
我会用这样的东西
select customer.*, lastComment.*
from account
cross apply (select top 1 * from comment where
comment.customerId=customer.customerId order by commentnumber desc) lastComment
where customer.age>30
如果您需要包含没有评论的客户,请使用outer apply
代替cross apply
答案 1 :(得分:1)
我会使用以下查询:
OUTER APPLY
(select top 1 [Comment] from dbo.[Pioneer-CO$Comment Line] where dbo.[Pioneer-CO$Purchase Header].[Sell-to Customer No_] = dbo.[Pioneer-CO$Comment Line].[No_] order by [Posting Date] desc) Comments
此外,在SELECT语句中使用Comments.[Comment]
而不是dbo.[Pioneer-CO$Comment Line].[Comment]
dbo。[Pioneer-CO $ Comment Line]表应该是OUTER APPLY加入查询。此外,按评论过帐日期或增量ID排序。
答案 2 :(得分:0)
您应该查看ID或主键,我认为较新的注释具有更高的ID。您可以加入表并执行Max(ID)或查找最新的时间戳(如果您在表上使用它)。
答案 3 :(得分:0)
看起来你有客户评论关系是1到多(0)。 尝试这样的事情怎么样,
SELECT TOP 1 Customers.*, Comments.*
FROM Customers
JOIN Customers ON Customers.Id = Comments.Id
ORDER BY Comments.Id DESC
在Bib的评论之后添加了
您也可以尝试以下
SELECT Customers.*, Comments.*
FROM Comments
JOIN
(SELECT MAX(Id) As CId FROM Comments GROUP BY CustomerId) AS CommentsMAX
ON CommentsMAX.CId = Comments.ID
JOIN
Customers ON Customers.Id = Comments.Id