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

Откуда: \\Украина\Запорожье
Сообщений: 9
Есть таблица "Владельцы":

Владелец_id | Имя


Есть таблица "Квартиры":

Квартира_id | Владелец_id | Площадь



У каждого владельца может быть по несколько квартир.

Нужно выбрать по ОДНОЙ квартире от каждого владельца.

select * from Квартиры
14 июл 09, 16:40    [7414625]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать по одной квартире от каждого владельца  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2549
Artem Vinnikov,

и какую именно из нескольких?
14 июл 09, 16:42    [7414644]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать по одной квартире от каждого владельца  [new]
Artem Vinnikov
Member

Откуда: \\Украина\Запорожье
Сообщений: 9
PaulYoung
Artem Vinnikov,

и какую именно из нескольких?


самую первую по квартира_id
14 июл 09, 16:44    [7414662]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать по одной квартире от каждого владельца  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2549
Artem Vinnikov,
SELECT
  Y.Владелец_id,
  (
  SELECT TOP 1 X.Квартира_id
  FROM Квартиры X
  WHERE X.Владелец_id = Y.Владелец_id
  ORDER BY X.Квартира_id
  ) AS Квартира_id
FROM Владельцы Y
14 июл 09, 16:46    [7414693]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать по одной квартире от каждого владельца  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
select top 1 with ties * from Квартиры
order by row_number() over(partition by Владелец_id order by квартира_id)
14 июл 09, 16:47    [7414700]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать по одной квартире от каждого владельца  [new]
Artem Vinnikov
Member

Откуда: \\Украина\Запорожье
Сообщений: 9
Работает! Спасибо.
14 июл 09, 16:57    [7414833]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать по одной квартире от каждого владельца  [new]
faustxp
Member

Откуда: Москва
Сообщений: 145
все гораздо проще
select min(Квартира_id), Владелец_id from Квартиры
group by Владелец_id 
14 июл 09, 18:00    [7415428]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать по одной квартире от каждого владельца  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
faustxp
все гораздо проще
а поле "площадь" куда дели?
автор просил
Artem Vinnikov
select * from Квартиры
то есть все поля, а не некоторые
14 июл 09, 18:02    [7415441]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать по одной квартире от каждого владельца  [new]
Ennor Tiegael
Member

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

Если потребуется вывести другие поля, кроме этих двух, то придется делать второе обращение к таблице. В общем случае это сильно дороже варианта Паганеля, особенно если в его случае будет подходящий для нумерации индекс.
14 июл 09, 18:03    [7415450]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать по одной квартире от каждого владельца  [new]
Зайцев Фёдор
Member

Откуда: Лужки
Сообщений: 5308
faustxp
все гораздо проще
select min(Квартира_id), Владелец_id from Квартиры
group by Владелец_id 

ну и где тут Площадь?
14 июл 09, 18:04    [7415453]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать по одной квартире от каждого владельца  [new]
так можно
Guest
select Квартира_id, Владелец_id, Площадь 
from Квартиры a
WHERE a.Квартира_id = (SELECT MIN(b.Квартира_id) FROM Квартиры b WHERE a.Владелец_id=b.Владелец_id)
14 июл 09, 18:09    [7415490]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать по одной квартире от каждого владельца  [new]
так можно
Guest
так можно
select Квартира_id, Владелец_id, Площадь 
from Квартиры a
WHERE a.Квартира_id = (SELECT MIN(b.Квартира_id) FROM Квартиры b WHERE a.Владелец_id=b.Владелец_id)

distinct тока ещё нада
select DISTINCT Квартира_id, Владелец_id, Площадь 
from Квартиры a
WHERE a.Квартира_id = (SELECT MIN(b.Квартира_id) FROM Квартиры b WHERE a.Владелец_id=b.Владелец_id)
14 июл 09, 18:11    [7415502]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать по одной квартире от каждого владельца  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
так можно
distinct тока ещё нада
зачем? насколько я понял, id квартиры это PK
если нет, то у меня к модели БД вопросы появятся
14 июл 09, 18:13    [7415523]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать по одной квартире от каждого владельца  [new]
faustxp
Member

Откуда: Москва
Сообщений: 145
Тогда так
select Квартира_id, Владелец_id, Площадь
from Квартиры
where Квартиры_id in (select min(Квартиры_id) from Квартиры group by Владелец_id)
Но уже не так просто
14 июл 09, 18:20    [7415572]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать по одной квартире от каждого владельца  [new]
так можно
Guest
Паганель
так можно
distinct тока ещё нада
зачем? насколько я понял, id квартиры это PK
если нет, то у меня к модели БД вопросы появятся

значит нинада)))
14 июл 09, 18:20    [7415573]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить