Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Телефон и клиенты. Группировка  [new]
kolya_tyurin
Member

Откуда:
Сообщений: 3
Представим что у нас есть клиенты и их телефоны в одной таблице и есть еще дата добавления номера .
Так вот у номеров есть много клиентов.
Если клиент имеет больше 1 клиента то нужно вывести того клиента, который был последним(то есть добавлен позже всех).
Помогите решить проблему уже какой день не могу сделать.
Можно написать в процедуре, но лучше запросом.
Думаю нужно как то сгруппировать, но у меня ничего не получается.
27 авг 18, 09:40    [21654581]     Ответить | Цитировать Сообщить модератору
 Re: Телефон и клиенты. Группировка  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
kolya_tyurin,

автор
Если клиент имеет больше 1 клиента то нужно вывести того клиента, который был последним

оргия какая-то.

Описывайте целиком с объектами и типами полей.
27 авг 18, 09:43    [21654586]     Ответить | Цитировать Сообщить модератору
 Re: Телефон и клиенты. Группировка  [new]
Посетитель
Member

Откуда:
Сообщений: 1384
TaPaK
kolya_tyurin,

автор
Если клиент имеет больше 1 клиента то нужно вывести того клиента, который был последним

оргия какая-то.

Описывайте целиком с объектами и типами полей.


клиент моего клиента - не мой клиент
27 авг 18, 09:44    [21654587]     Ответить | Цитировать Сообщить модератору
 Re: Телефон и клиенты. Группировка  [new]
Kopelly
Member

Откуда: Красноярск
Сообщений: 289
kolya_tyurin,

Select a.Клиент,
b.Телефон
From Клиенты a
Outer apply (
Select top 1 Телефон 
From Телефоны 
Where a.Клиент = Клиент
Order by ДатаДобавления desc
) b
27 авг 18, 09:48    [21654589]     Ответить | Цитировать Сообщить модератору
 Re: Телефон и клиенты. Группировка  [new]
kolya_tyurin
Member

Откуда:
Сообщений: 3
TaPaK, ну я тут недавно, не знаю как красиво нарисовать. Но выглядит примерно так
Телефон Id_client
9043434434 123456 2018-08-20
9043434434 123457 2018-08-23
9043434434 123458 2018-08-21
И вот как вывести клиента "123457"
27 авг 18, 09:50    [21654593]     Ответить | Цитировать Сообщить модератору
 Re: Телефон и клиенты. Группировка  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20174
В смысле последнего по дате? FIRST(Client) OVER (PARTITION BY PhoneNum ORDER BY Date DESC)
27 авг 18, 09:52    [21654595]     Ответить | Цитировать Сообщить модератору
 Re: Телефон и клиенты. Группировка  [new]
kolya_tyurin
Member

Откуда:
Сообщений: 3
Kopelly, дадаа вот это было мне нужно. Этот оператор OUTER APPLY. Спасибо большое))) наконец-то разберусь)) Спасибо)
27 авг 18, 09:56    [21654601]     Ответить | Цитировать Сообщить модератору
 Re: Телефон и клиенты. Группировка  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
kolya_tyurin,

да хоть OUTER APPLY, TOP 1 WITH TIES, ROW_NUMBER, FIRST_VALUE
27 авг 18, 09:57    [21654602]     Ответить | Цитировать Сообщить модератору
 Re: Телефон и клиенты. Группировка  [new]
Kopelly
Member

Откуда: Красноярск
Сообщений: 289
kolya_tyurin,

Получается на одном телефоне несколько клиентов и нужно сопоставить номер только с последним клиентом?
Тогда:
Select * From (
Select *, row_number() over (Partition by Телефон Order by ДатаДобавления desc) as RN
From ТаблицаТелефонов)
Where RN = 1
27 авг 18, 09:58    [21654603]     Ответить | Цитировать Сообщить модератору
 Re: Телефон и клиенты. Группировка  [new]
Щукина Анна
Member

Откуда:
Сообщений: 1466
kolya_tyurin,

задача стара, как мир, но раз в неделю регулярно возникает вопрос как её решить....
может уже кто оформит в виде статьи для Ф.А.К.а, чтобы не искать каждый раз топик с ответом по форуму...
27 авг 18, 19:48    [21655402]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить