Как получить строки (с максимальным значением в поле), имеющие другое общее поле? - PullRequest
2 голосов
/ 30 апреля 2010

у меня есть стол; пусть это будет называться table1; со следующими полями и данными

альтернативный текст http://img228.imageshack.us/img228/3827/45939084.png

Мне нужен запрос, который возвращает запись с максимальным значением в Field3 для каждой группы записей, имеющих одинаковое значение в Field2. Так что запрос возвращает:

альтернативный текст http://img87.imageshack.us/img87/62/48847706.png

Как это можно сделать с помощью SQL-запросов?

1 Ответ

5 голосов
/ 30 апреля 2010

Это:

WITH    q AS
        (
        SELECT  *, ROW_NUMBER() OVER (PARTITION BY field2 ORDER BY field3 DESC) AS rn
        FROM    table1
        )
SELECT  *
FROM    q
WHERE   rn = 1

или это:

SELECT  q.*
FROM    (
        SELECT  DISTINCT field2
        FROM    table1
        ) qo
CROSS APPLY
        (
        SELECT  TOP 1 *
        FROM    table1 t
        WHERE   t.field2 = qo.field2
        ORDER BY
                t.field3 DESC
        ) q

В зависимости от количества элементов field2 первый или второй запрос могут быть более эффективными.

См. Эту статью для получения более подробной информации:

...