Как использовать max в предложении where? - PullRequest
0 голосов
/ 26 марта 2019

В нашей базе данных каждый клиент может иметь до 3 телефонных номеров, и каждый телефонный номер связан с ID_phone_number и ID_type_phone и id_person.

Поэтому мне нужно сделать общий выбор, когда он возвращает телефонномер с id_type_phone = '2' и более высоким номером id_phone_number, связанным с этим id_person.

Этот выбор должен работать для всей моей базы данных, поэтому я не могу указать для него id_person

У меня есть:

SELECT 
  (SELECT collun1.phone WHERE collun1.ID_type_phone = '2')
FROM collun1
WHERE id_person = 4

Я хочу что-то вроде

SELECT 
  (SELECT collun1.phone WHERE collun1.ID_type_phone = '2' and max(id_phone_number)
FROM collun1

Ответы [ 4 ]

1 голос
/ 26 марта 2019

Вы можете использовать функцию ранга SQL Server с PARTITION и ORDER BY

Что-то вроде

Select * from (
    Select  RANK() OVER (
        PARTITION BY id_person 
        ORDER BY id_phone_number desc) AS phoneRank
        ,*
    from    collun1
    WHERE   collun1.ID_type_phone = '2') as tempSub
where phoneRank = 1
0 голосов
/ 27 марта 2019

Итак, я получил его, создав временную таблицу на основе ответа Хади.

Я сделал: `

CREATE TABLE ##Celphone (
Num_Phone varchar(14),
ID_Person numeric(8)); 

insert into ##Celphone (Num_Phone, ID_Person)
        SELECT Phone, ID_Person
        FROM COLLUN1 
        WHERE ID_Type_Phone = '2' AND ID_Phone = (SELECT MAX(ID_Phone) FROM COLLUN1 C WHERE C.ID_Person = COLLUN1.ID_Person)

SELECT DISTINCT
       ##Celphone.Num_Phone,
       ID_Person
0 голосов
/ 26 марта 2019

A GROUP BY, вероятно, будет быстрее (в зависимости от ваших данных):

SELECT id_person, MAX(ID_phone_number) 
FROM collun1 
WHERE ID_type_phone = '2' 
GROUP BY id_person
0 голосов
/ 26 марта 2019

Используйте следующий синтаксис:

SELECT id_person, phone 
FROM collun1 
WHERE ID_type_phone = '2' AND id_phone_number = (SELECT MAX(id_phone_number) FROM collun1 c WHERE c.id_person = collun1.id_person)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...