выбор верхнего столбца 1 с соответствующим столбцом 2 - PullRequest
0 голосов
/ 12 февраля 2009

извините за вопрос, но у меня заканчиваются идеи

У меня есть эта таблица:

[id]    [pid]    [vid]
1        4        6844
1        5        6743
2        3        855
2        6        888
...

как мне запросить этот eg.table, чтобы получить следующий результат:

[id]    [pid]    [vid]
1        5        6743
2        6        888

я хочу получить самый высокий [pid] для [id] с [vid], соответствующим этому [pid]

есть идеи?

Я использую MSSQL 2008

Ответы [ 3 ]

4 голосов
/ 12 февраля 2009

в одну сторону

select t1.* from
(select id,max(pid) as Maxpid
from yourtable
group by id) t2
join yourtable t1 on t2.id = t1.id
and t2.Maxpid = t1.pid
1 голос
/ 12 февраля 2009

Я бы использовал Common Table Expressions (CTE). Это предлагает множество возможностей, таких как:

WITH Result (RowNumber, [id], [pid], [vid])
AS
(
    SELECT Row_Number() OVER (PARTITION BY [id]
                              ORDER     BY [vid] DESC)
          ,[id]
          ,[pid]
          ,[vid]
      FROM MyTable
)
SELECT [id]
      ,[pid]
      ,[vid]
  FROM Result
 WHERE RowNumber = 1
1 голос
/ 12 февраля 2009

Так как вы используете Microsoft SQL Server 2008, тогда я бы рекомендовал Общих табличных выражений и предложение OVER для разделения результатов на группы по id и возвращает только верхнюю строку в каждой группе (упорядочено по pid ). Ответ Блика показывает один из способов сделать это.

(Кстати, этот же базовый подход очень полезен и для более эффективной подкачки.)

Не существует фантастически прекрасного способа сделать это со "стандартным" SQL. Метод show в ответе SQLMenace будет работать только в тех базах данных, где вы можете использовать подзапрос в качестве таблицы. Например, это мог бы быть один из способов сделать это в SQL Server 2000, но он может работать не во всех основных СУБД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...