2015-01-07 20 views
0

我有两个表,一个存储一般信息,另一个存储注释。将加入的表限制为一个结果Mssql

结构是表中的一条记录表可以在表中的有很多相应的结果。 但是我试图写一个查询,从表一表2的最后一条评论。

例如,假设存在表用户的一个,他们有5条评论中表中的两,查询我想会从表一个,只出表的最后一个注释拉人两个

我有这个疑问之下然而,这将从表拉一切一个这是我想要的,但如果在表备案多个记录的一个这将给他们带来一切英寸

简单的例子

Query results 
ID Field two Field three Field four  field out of table 2 
1  Data  Data   Data   Comment 1 
2  Data  Data   Data   Comment 1 
2  Data  Data   Data   Comment 2 
3  Data  Data   Data   Comment 1 
4  Data  Data   Data   Comment 1 
5  Data  Data   Data   Comment 1 

正如你看到的,因为有ID为2的记录是在拉两次,我想要的两点意见只是最后一个注释中显示:

SELECT Qualitycontrol.ID, Qualitycontrol.MachineNo, Qualitycontrol.Description,  
    Qualitycontrol.CreatedTime, Qualitycontrol.ProductCode, Qualitycontrol.WorkOrder, 
    Qualitycontrol.Quantity, QualityControl_Comments.Comment 
FROM Qualitycontrol 
LEFT OUTER JOIN QualityControl_Comments 
      ON Qualitycontrol.ID = QualityControl_Comments.QCUID 
WHERE (Qualitycontrol.CreatedTime 
     BETWEEN CAST(GETDATE() AS DATE) AND DATEADD(DAY, 1, CAST(GETDATE() AS DATE))) 
ORDER BY Qualitycontrol.MachineNo 

回答

1

执行的OUTER APPLY而不是LEFT JOIN

+0

非常感谢你的工作为了什么,我需要一种享受 –

1

可以执行JOIN并采取基于MAX(CommentId)每条记录​​的最后一个注释。像这样添加到您的WHERE条款的东西应该工作:

AND qcc.ID = (SELECT MAX(ID) FROM QualityControl_Comments WHERE QCID = qc.ID) 

全面查询(用别名):

SELECT qc.ID , 
     qc.MachineNo , 
     qc.Description , 
     qc.CreatedTime , 
     qc.ProductCode , 
     qc.WorkOrder , 
     qc.Quantity , 
     qcc.Comment 
FROM Qualitycontrol qc 
LEFT JOIN QualityControl_Comments qcc ON qc.ID = qcc.QCUID 
WHERE (qc.CreatedTime BETWEEN CAST(GETDATE() AS DATE) 
            AND  DATEADD(DAY, 1, 
                CAST(GETDATE() AS DATE))) 
     AND qcc.ID = (SELECT MAX(ID) FROM QualityControl_Comments WHERE QCID = qc.ID) 
ORDER BY qc.MachineNo