Как я могу получить две разные записи в SQL - PullRequest
0 голосов
/ 11 июня 2018

У меня есть таблица адресов, и я пытаюсь выбрать максимальный ID 2 строки на основе AddressType_ID (AddressType_ID является типом PHYSICAL или MAILING. Физический имеет значение 1, а почтовое сообщение имеет значение 2) Можете ли вы указать мне логику.

Address_id  Foreign_Key  AddressLine1     Addresstype_id
1849        1854         182 SE 136th Rd         1
3287        1854         PO Box 285              2
32330       1854         182 SE 139th Rd         1
32331       1854         PO Box 288              2

Я пытаюсь выбрать все значения столбцов адреса с идентификатором 32330 и 32331 баз на addresstype_Id.В чем может быть логика, чтобы получить эти две записи?

Ответы [ 3 ]

0 голосов
/ 11 июня 2018

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

SELECT TOP (1)
Address_id, Foreign_Key, AddressLine1, Addresstype_id
FROM yourAddressTable
WHERE Addresstype_id = 1
ORDER BY Address_id DESC

UNION ALL

SELECT TOP (1)
Address_id, Foreign_Key, AddressLine1, Addresstype_id
FROM yourAddressTable
WHERE Addresstype_id = 2
ORDER BY Address_id DESC
0 голосов
/ 11 июня 2018

Вы можете использовать функцию row_number () со связями ... method:

select top (1) with ties, *
from table t
order by row_number() over (partition by foreign_key,type order by address_id desc);

Однако, я обнаружил, что у вас есть PK т.е. address_id, тогда вы также можете выразить его как подзапрос с корреляциейтакой подход:

select t.*
from tabel t
where address_id = (select max(t1.address_id) 
                    from table t1 
                    where t1.foreign_key = t.foreign_key and t1.type = t.type 
                   );
0 голосов
/ 11 июня 2018

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

, в этом случае используйте следующий запрос, используя ROW_NUMBER() оконная функция

select 
Address_id,
Foreign_Key,
AddressLine1,
Addresstype_id
from
(
select 
*, 
rn= row_number() over( partition by foreign_key,type order by address_id desc)
from youraddresstable
) t
where rn= 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...