0

我有一个包含主要和次要公司位置的地址表,例如:

地址:

 ID    CompanyName       AdressType    MainID    Location 

 1    ExampleCompany        H             0        Germany 

 2    ExampleCompany        N             1        Sweden
   
 3    ExampleCompany        N             1         Germany

我们得到了另一个联系人表,其中包括每个公司位置的最新联系人

联系人

ID    SuperID    Datecreate    Notes

1       1        10.04.2018     XY

2       3        09.04.2018     YX

3       2        11.04.2018      XX

现在我们要选择每家公司的最新联系人并对它们进行排序,以便我们得到一个我们很长时间没有联系的所有客户的列表。

我想过这样的事情:

SELECT 
ADDRH.ID,
ADDRH.COMPANY1,
TOPCONT.ID,
TOPCONT.DATECREATE,
TOPCONT.NOTES0

FROM dbo.ADDRESSES ADDRH
OUTER APPLY (SELECT TOP 1 ID, SUPERID, DATECREATE, CREATEDBY, NOTES0 FROM DBO.CONTACTS CONT WHERE ADDRH.ID = CONT.SUPERID ORDER BY DATECREATE DESC) TOPCONT
WHERE
TOPCONT.ID IS NOT NULL
ORDER BY TOPCONT.DATECREATE

但这仍然缺少我们在地址表中多次获得同一家公司的事实。我如何创建一个列表,让每个公司都有最新的联系人?

谢谢你的帮助

问候

4

1 回答 1

0

好吧,您还必须从地址中删除重复项。由于您的数据结构,我认为最好的方法是使用row_number()

SELECT ac.*
FROM (SELECT a.ID, a.COMPANY1, c.ID, c.DATECREATE, c.NOTES0,
             ROW_NUMBER() OVER (PARTITION BY a.COMPANY1 ORDER BY c.DATECREATE DESC) as seqnum
      FROM dbo.ADDRESSES a JOIN
           DBO.CONTACTS c
           ON a.ID = c.SUPERID
      WHERE c.ID IS NOT NULL
     ) ac
WHERE seqnum = 1
ORDER BY c.DATECREATE;
于 2018-04-11T11:51:24.547 回答