SQL - 仅返回最近的行

时间:2016-10-19 21:34:40

标签: sql-server

我正在处理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

4 个答案:

答案 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