вытащить первую подходящую строку из группы sql - PullRequest
0 голосов
/ 10 февраля 2012

Скажем, у вас есть проекция, подобная следующей:

Artist         Painting            Year
---------------------------------------
Alfred         Birds               1945
Alfred         Apples&Oranges      1947
Ben            ZealousNeighbours   1912
Calum          Hope Spliced        1760
Calum          Horseplay           1765
Calum          Earth               1780
David          Apples&Oranges      1947

Как вернуть первое следующее отношение:

Artist         Painting            Year
---------------------------------------
Alfred         Birds               1945
Ben            ZealousNeighbours   1912
Calum          Hope Spliced        1760
David          Apples&Oranges      1947

Т.е. первая картина, которую нарисовал каждый художник ..

Только ANSI SQL

Ответы [ 2 ]

1 голос
/ 10 февраля 2012

Попробуйте следующее:

SELECT
    [Artist],
    [Painting],
    [Year]
FROM
(
    SELECT
        [Artist],
        [Painting],
        [Year],
        ROW_NUMBER() OVER(PARTITION BY [Artist] ORDER BY [Year] ASC) AS [Rank]
    FROM
        [Table]
) AS a
WHERE
    a.[Rank] = 1
0 голосов
/ 10 февраля 2012

Это должно работать на любом совместимом с ANSI-89 диалекте SQL, однако оно сломается, если художник сделал несколько рисунков в первый год - вы можете настроить его, сохранив фактическое значение даты и времени вместо года, если вам нужна более точная детализация.

SELECT * 
FROM Paintings 
    INNER JOIN
    (SELECT Artist, MIN([Year]) MinYear 
     FROM Paintings 
     GROUP BY Artist) 
    Minimum ON Minimum.MinYear = Paintings.Year AND Minimum.Artist = Paintings.Artist

Если ваш SQL соответствует ANSI-2003, вы можете делать то, что перечислено выше.

e: Я не думаю, что есть способ гарантировать возвращение только одной строки на исполнителяс использованием только ANSI-89 SQL.

...