Таблица адресов SQL для той же компании, требуется последняя контактная информация

У меня есть таблица адресов с указанием месторасположения основной и дополнительной компании, например:

АДРЕСА:

 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

Но при этом все еще не учитывается тот факт, что одна и та же компания несколько раз была указана в таблице адресов. как я могу создать список, чтобы у каждой компании был последний контакт?

Спасибо за вашу помощь

Привет

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
23
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Что ж, вам также придется удалить дубликаты с адреса. Из-за структуры ваших данных я думаю, что лучше всего использовать 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;

Другие вопросы по теме