匹配第二个表中的单行与多列匹配

时间:2019-02-22 20:04:38

标签: sql-server tsql

我在下面有两个联接表。我只想从REQUIREMENTS表中获得最新日期为(3/8/2019)的一行。

**PART**                **REQUIREMENTS**            
ID      OH  TIME        PART    ORDER   QTY DATE
5512    5   21          5512    74619   102 3/8/2019
                        5512    74907   25  3/10/2019
                        5512    74908   41  3/19/2019
                        5512    74243   59  3/21/2019

当我使用Min(REQUIREMENTS.DATE)时,由于ORDER和QTY表中的唯一数据,我仍然得到全部四行。我很确定我需要使用Select Top 1 [...],但是在弄清楚在哪里使用它时遇到了麻烦。最终,我希望返回:

PART    DATE        OH  TIME    ORDER   QTY
5512    3/8/2019    5   21      74619   102 

有人可以指出正确的方向(SQL Server 2012)吗?预先感谢!

2 个答案:

答案 0 :(得分:2)

您可以使用相关子查询来执行此操作:

SELECT *
FROM PART P
    INNER JOIN REQUIREMENTS R ON
        P.ID = R.PART
WHERE REQUIREMENTS.[DATE] = (SELECT MAX([DATE] FROM REQUIREMENTS WHERE R.PART = PART)

答案 1 :(得分:1)

您可以使用APPLY,如果需要OUTERCROSS,则可以选择。

SELECT p.ID, p.state, p.time
    , r.qty, r.date1
FROM dbo.Part p
OUTER APPLY (
    select top 1 qty, date
    from dbo.Requirements
    where part = p.ID
    order by date1
) as r