Справка по SQL-запросам для группировки результатов - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть таблица доступа в следующем формате:

CostomerID, PhoneType, LastUsedDate, PhoneNumber

Я хочу написать запрос, который даст мне самый последний номер телефона для каждого клиентапо типу.Допустим, у нас есть

CostomerID, PhoneType, LastUsedDate, PhoneNumber
987/Landline/201809/555-343-9017
987/Landline/201610/555-397-0975
987/Cell/201811/555-870-1862

. Я хочу, чтобы запрос генерировал результаты для Клиента 987 с его стационарным номером с 201809 и его номером с 201811. До сих пор я придумал

SELECT  p.CnBio_ID, p.Type, max(p.Subj_Date_Last_Seen_1) as maxdate
  from Phones p
  GROUP BY p.CnBio_ID, p.Personal_Business, p.Type

Это генерирует самую последнюю дату для идентификатора и типа, но я не могу понять, как добавить номер телефона, который соответствует этим данным, в результаты?

Редактировать: я должен добавить, что каждыйСтрока также имеет свой уникальный идентификатор, если это поможет.

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Вы можете попробовать с correlated subquery

SELECT  p.CnBio_ID, p.Type, p.Subj_Date_Last_Seen_1 as maxdate
from Phones p
where p.Subj_Date_Last_Seen_1 in (select max(p.Subj_Date_Last_Seen_1) from phones p1 
where p1.CnBio_ID=p.CnBio_ID and p1.Type=p.Type group by p1.CnBio_ID, p1.Type)

ИЛИ Вы можете попробовать с помощью row_number()

select * from
(
SELECT  p.CnBio_ID, p.Type, p.Subj_Date_Last_Seen_1,row_number() over(partition by  p.CnBio_ID, p.Type order by p.Subj_Date_Last_Seen_1 desc) as rn
from Phones p
)A where rn=1
0 голосов
/ 15 февраля 2019

Вы можете использовать соединение как:

 SELECT t1.* ,t2.PhoneNumber(SELECT  p.CnBio_ID, p.Type, max(p.Subj_Date_Last_Seen_1) as axdate,p2.phonenumber
      from Phones p  GROUP BY p.CnBio_ID, p.Personal_Business, p.Type) as t1 inner join Phones as t2 on t1.CnBio_ID = t2.CnBio_ID;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...