T SQL 地址 Table 与同一家公司需要最新联系方式
T SQL Adress Table with the same Company need latest Contact
我得到了一个地址 Table,其中包含公司的主要和次要位置,例如:
地址:
ID CompanyName AdressType MainID Location
1 ExampleCompany H 0 Germany
2 ExampleCompany N 1 Sweden
3 ExampleCompany N 1 Germany
我们得到了另一个联系人 Table,包括每个公司地点的最新联系人
联系人
ID SuperID Datecreate Notes
1 1 10.04.2018 XY
2 3 09.04.2018 YX
3 2 11.04.2018 XX
现在我们想要 select 每个公司的最新联系人并对它们进行排序,这样我们就得到了我们很长时间没有联系的所有客户的列表。
我想到了这样的事情:
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
但这仍然忽略了我们在地址 table 中多次找到同一家公司的事实。我如何创建一个列表,让每个公司都有最新的联系方式?
感谢您的帮助
问候
嗯,您还必须从地址中删除重复项。由于您的数据结构,我认为最好的方法是使用 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;
我得到了一个地址 Table,其中包含公司的主要和次要位置,例如:
地址:
ID CompanyName AdressType MainID Location
1 ExampleCompany H 0 Germany
2 ExampleCompany N 1 Sweden
3 ExampleCompany N 1 Germany
我们得到了另一个联系人 Table,包括每个公司地点的最新联系人
联系人
ID SuperID Datecreate Notes
1 1 10.04.2018 XY
2 3 09.04.2018 YX
3 2 11.04.2018 XX
现在我们想要 select 每个公司的最新联系人并对它们进行排序,这样我们就得到了我们很长时间没有联系的所有客户的列表。
我想到了这样的事情:
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
但这仍然忽略了我们在地址 table 中多次找到同一家公司的事实。我如何创建一个列表,让每个公司都有最新的联系方式?
感谢您的帮助
问候
嗯,您还必须从地址中删除重复项。由于您的数据结构,我认为最好的方法是使用 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;